日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WIN API当中的堆管理,虚拟内存及常规复制,移动,填充代码

發布時間:2025/4/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WIN API当中的堆管理,虚拟内存及常规复制,移动,填充代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼一個一個的輸入,有點累,但也充實。

感覺收獲較多。

特別是書中將C標準庫的malloc最終調用的是HeapAlloc函數。

而相對于堆內存管理負責的HeapAlloc(GlobalAlloc,LocalAlloc),屬于虛擬內存管理范圍的VirtualAlloc更底層。

這對理解操作系統實現及以后的軟件性能及內存泄漏調度,更有幫助。

Heap.c

1 #include <Windows.h> 2 #include <stdio.h> 3 4 #define MEM_BLOCK_SIZE 32 5 6 BOOL ShowMemContent(LPVOID, SIZE_T); 7 int main(void) 8 { 9 HANDLE hHeap = GetProcessHeap(); 10 LPVOID lpSrc; 11 LPVOID lpDis; 12 13 lpSrc = HeapAlloc(hHeap, 0, MEM_BLOCK_SIZE); 14 lpDis = HeapAlloc(hHeap, 0, MEM_BLOCK_SIZE); 15 16 printf("HeapAlloc distribut but not make zero: \n"); 17 ShowMemContent(lpDis, MEM_BLOCK_SIZE); 18 19 ZeroMemory(lpDis, MEM_BLOCK_SIZE); 20 printf("ZeroMemory make zero: \n"); 21 ShowMemContent(lpDis,MEM_BLOCK_SIZE); 22 23 FillMemory(lpSrc, MEM_BLOCK_SIZE, 0xBB); 24 FillMemory(lpSrc, MEM_BLOCK_SIZE/2, 0xAA); 25 CopyMemory(lpDis, lpSrc, MEM_BLOCK_SIZE); 26 27 printf("FillMemory fill Memory: \n"); 28 ShowMemContent(lpDis,MEM_BLOCK_SIZE); 29 30 HeapFree(hHeap, 0, lpSrc); 31 HeapFree(hHeap, 0, lpDis); 32 return 0; 33 } 34 35 BOOL ShowMemContent(LPVOID lpMem, SIZE_T dwSize) 36 { 37 BYTE lpShow[MEM_BLOCK_SIZE]; 38 INT i; 39 40 if(dwSize > MEM_BLOCK_SIZE) 41 { 42 printf("over-flow!"); 43 return FALSE; 44 } 45 46 CopyMemory((LPVOID)lpShow, lpMem, dwSize); 47 for(i = 0; i < dwSize; i++) 48 { 49 printf("%.2x",lpShow[i]); 50 if(!((i+1)%16)) 51 { 52 printf("\n"); 53 } 54 } 55 printf("\n"); 56 return TRUE; 57 }

Virtual.c

1 #include <Windows.h> 2 #include <stdio.h> 3 4 int main(void) 5 { 6 SIZE_T sizeVirtual = 4000; 7 LPVOID lpRound = (LPVOID)0x100000FF; 8 MEMORY_BASIC_INFORMATION mbi; 9 10 LPVOID lpAddress = VirtualAlloc( 11 lpRound, sizeVirtual, 12 MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE13 ); 14 if(lpAddress == NULL) 15 { 16 printf("VirtualAlloc error: %d\n",GetLastError()); 17 return 1; 18 } 19 printf("Alloc:MEM_COMMIT|MEM_RESERVE\n"); 20 CopyMemory(lpAddress, "Hello", lstrlen("Hello")); 21 printf("Alloction,Copy sucess.address: 0x%.8x, content: %s\n",lpAddress, lpAddress); 22 VirtualQuery(lpAddress, &mbi, sizeof(mbi)); 23 printf("Information from VirtualQuery: \n" 24 "BaseAddress:0x%.8x\tAllocationBase:0x%.8x\t" 25 "AllocationProtect:0x%.8x\tRegionSize:%u\t" 26 "State:0x%.8x\tProtect:0x%.8x\tType:0x%.8x\n", 27 mbi.BaseAddress,mbi.AllocationBase, 28 mbi.AllocationProtect,mbi.RegionSize, 29 mbi.State,mbi.Protect,mbi.Type 30 ); 31 32 printf("Free: DECOMMIT\n"); 33 if(!VirtualFree(lpRound, sizeVirtual, MEM_DECOMMIT)) 34 { 35 printf("VirtualFree error: %d",GetLastError()); 36 return 1; 37 } 38 39 VirtualQuery(lpAddress, &mbi, sizeof(mbi)); 40 printf("Information from VirtualQuery: \n" 41 "BaseAddress:0x%.8x\tAllocationBase:0x%.8x\t" 42 "AllocationProtect:0x%.8x\tRegionSize:%u\t" 43 "State:0x%.8x\tProtect:0x%.8x\tType:0x%.8x\n", 44 mbi.BaseAddress,mbi.AllocationBase, 45 mbi.AllocationProtect,mbi.RegionSize, 46 mbi.State,mbi.Protect,mbi.Type 47 ); 48 49 printf("Free:RELEASE\n"); 50 if(!VirtualFree(lpAddress, 0, MEM_RELEASE)) 51 { 52 printf("VirtualFree error: %d",GetLastError()); 53 return 1; 54 } 55 return 0; 56 }

MemOp.c

1 #include <Windows.h> 2 #include <stdio.h> 3 4 #define MEM_BLOCK_SIZE 32 5 6 BOOL ShowMemContent(LPVOID, SIZE_T); 7 int main(void) 8 { 9 HANDLE hHeap = GetProcessHeap(); 10 LPVOID lpSrc; 11 LPVOID lpDis; 12 13 lpSrc = HeapAlloc(hHeap, 0, MEM_BLOCK_SIZE); 14 lpDis = HeapAlloc(hHeap, 0, MEM_BLOCK_SIZE); 15 16 printf("HeapAlloc distribut but not make zero: \n"); 17 ShowMemContent(lpDis, MEM_BLOCK_SIZE); 18 19 ZeroMemory(lpDis, MEM_BLOCK_SIZE); 20 printf("ZeroMemory make zero: \n"); 21 ShowMemContent(lpDis,MEM_BLOCK_SIZE); 22 23 FillMemory(lpSrc, MEM_BLOCK_SIZE, 0xBB); 24 FillMemory(lpSrc, MEM_BLOCK_SIZE/2, 0xAA); 25 CopyMemory(lpDis, lpSrc, MEM_BLOCK_SIZE); 26 27 printf("FillMemory fill Memory: \n"); 28 ShowMemContent(lpDis,MEM_BLOCK_SIZE); 29 30 HeapFree(hHeap, 0, lpSrc); 31 HeapFree(hHeap, 0, lpDis); 32 return 0; 33 } 34 35 BOOL ShowMemContent(LPVOID lpMem, SIZE_T dwSize) 36 { 37 BYTE lpShow[MEM_BLOCK_SIZE]; 38 INT i; 39 40 if(dwSize > MEM_BLOCK_SIZE) 41 { 42 printf("over-flow!"); 43 return FALSE; 44 } 45 46 CopyMemory((LPVOID)lpShow, lpMem, dwSize); 47 for(i = 0; i < dwSize; i++) 48 { 49 printf("%.2x",lpShow[i]); 50 if(!((i+1)%16)) 51 { 52 printf("\n"); 53 } 54 } 55 printf("\n"); 56 return TRUE; 57 }

運行圖:

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的WIN API当中的堆管理,虚拟内存及常规复制,移动,填充代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线sese| www.夜夜骑| 亚洲国产清纯 | 成人aaaa | 国产三级精品在线 | 亚洲精品视频在线观看视频 | 国产女同91疯狂高潮互磨 | 黄色片在线看 | 天天干天天干天天 | 久久一区二区电影 | www.jizz国产| 欧美精品第一区 | 欧美激情h | 久久久精品人妻一区二区三区色秀 | 在线看你懂得 | 久久综合国产 | 欧美淫| 国产乱叫456在线 | 围产精品久久久久久久 | 超碰98| 精品视频一区二区 | 亚洲欧美日韩成人在线 | 久草视频2 | 91精品国产高清一区二区三密臀 | 亚洲高清视频免费观看 | 亚洲综合五月 | 少妇吹潮 | 黄色网址链接 | 好吊操av | 伊人久久综合影院 | 华丽的外出在线 | 中文字幕国产一区二区 | 国产又粗又大又爽视频 | 亚洲视频精品一区 | 青草成人免费视频 | 国产精品电影在线观看 | 亚洲狠狠 | 777久久久精品一区二区三区 | 最新中文字幕久久 | 毛片基地免费观看 | 99re6在线视频 | 激情视频亚洲 | 成人黄色大全 | 青娱乐导航| 永久av免费| 97在线播放 | 欧美在线视频二区 | 天天综合日日夜夜 | 亚洲欧美另类中文字幕 | 久久精品一本 | 一本到视频 | 亚洲欧洲日本一区二区三区 | 亚洲精品久久夜色撩人男男小说 | 一级做a爱片久久毛片 | 欧美久久一级 | 精品美女一区二区 | 日韩欧美中出 | av午夜激情| 中文字幕在线观看网站 | 亚洲va中文字幕 | 欧美88av| 国产成人a∨ | 精品在线视频一区二区三区 | 精品久久久久久久久久久国产字幕 | 性生活视频在线播放 | 亚洲一区 | 久久久久极品 | 天天av天天爽 | www.国产高清 | 激情中文网 | 毛片毛多水多 | 精品国产av一区二区三区 | 四虎最新站名点击进入 | 欧美日韩在线视频一区二区三区 | 羞羞涩| 久久久久久91 | 伊人网亚洲 | 欧美视频黄色 | 在线免费av观看 | 国产又色又爽无遮挡免费 | 91麻豆映画传媒 | 麻豆日韩 | 欧美一级欧美三级在线观看 | 亚洲性大片| 超碰极品 | 男人爆操女人 | 国产中文久久 | 欧美成人秋霞久久aa片 | 日韩精品欧美 | 极品淫少妇 | 91麻豆产精品久久久久久 | 亚洲美女黄色片 | 久久亚洲综合国产精品99麻豆精品福利 | 成人av一区二区在线观看 | 免费三级黄 | 久久无码视频一区 | 日韩国产在线观看 | 在线观看中文字幕码 | 日韩视频中文字幕在线观看 |