Created
November 18, 2017 04:51
-
-
Save igaozp/d13f01af65919e0566156c1570ae243c to your computer and use it in GitHub Desktop.
虚拟内存分配
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <windows.h> | |
| #include <iostream> | |
| void FillZero(LPVOID pBlock, DWORD dwSize) | |
| { | |
| _try | |
| { | |
| BYTE* arFill = (BYTE *)pBlock; | |
| for (DWORD dwFill = 0; dwFill < dwSize; ++dwFill) | |
| { | |
| arFill[dwFill] = 0; | |
| } | |
| std::cout << "Memory zeroed." << std::endl; | |
| } | |
| _except(EXCEPTION_EXECUTE_HANDLER) | |
| { | |
| std::cout << "Could not zero memory. " << std::endl; | |
| } | |
| } | |
| int main(int argc, char* argv[]) | |
| { | |
| LPVOID pBlock; | |
| // 1G大小 | |
| DWORD c_dwGigabyte = 1 << 30; | |
| // 1M大小 | |
| DWORD c_dwMegabyte = 1 << 20; | |
| // 以下运行4种内存分配方式,分别调用FillZero(), | |
| // 相当于使用这些内存,测试内存操作是否成功。 | |
| // 分配方式1 | |
| pBlock = ::malloc(c_dwGigabyte); | |
| ::FillZero(pBlock, c_dwMegabyte); | |
| ::free(pBlock); | |
| // 分配方式2 | |
| pBlock = ::VirtualAlloc( | |
| NULL, // 不指定起始地址 | |
| c_dwGigabyte, // 要求1GB | |
| MEM_COMMIT, // 对应的交换文件页(磁盘)和所要求的页表被留出来,然而,仍然没有物理RAM被分配, | |
| // 只有当程序访问这部分内存时RAM内存才会被真正分配。 | |
| PAGE_READWRITE); // 对此的读写操作 | |
| ::FillZero(pBlock, c_dwMegabyte); | |
| ::VirtualFree(pBlock, 0, MEM_RELEASE); | |
| // 分配方式3 | |
| pBlock = ::VirtualAlloc( | |
| NULL, // 不指定起始地址 | |
| c_dwGigabyte, // 要求1GB | |
| MEM_RESERVE, // 不调配外存 | |
| PAGE_READWRITE); // 对此的读写操作 | |
| ::FillZero(pBlock, c_dwMegabyte); | |
| ::VirtualFree(pBlock, 0, MEM_RELEASE); | |
| // 分配方式4 | |
| pBlock = ::VirtualAlloc( | |
| NULL, // 不指定起始地址 | |
| c_dwGigabyte, // 要求1GB | |
| MEM_RESERVE, // 不调配外存 | |
| PAGE_READWRITE); // 对此的读写操作 | |
| // 给虚拟空间调配外存。 | |
| ::VirtualAlloc( | |
| pBlock, | |
| c_dwMegabyte, | |
| MEM_COMMIT, // 对应的交换文件页(磁盘)和所要求的页表被留出来,然而,仍然没有物理RAM被分配, | |
| // 只有当程序访问这部分内存时RAM内存才会被真正分配。 | |
| PAGE_READWRITE); | |
| ::FillZero(pBlock, c_dwMegabyte); | |
| ::VirtualFree(pBlock, 0, MEM_RELEASE); | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment