www.pudn.com > OS.rar > 7-2.cpp
// 工程largealloc # include# include // 尝试以指定长度的零数字填充内存块的简便方法 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; } } void main() { // 简单的常数 DWORD c_dwGigabyte = 1 << 30; DWORD c_dwMegabyte = 1 << 20; // 使用内存分配来获得1GB块 { LPVOID pBlock = :: malloc(c_dwGigabyte) ; :: FillZero (pBlock, c_dwMegabyte) ; :: free(pBlock) ; } // 使用虚拟分配以获得物理1GB块 { LPVOID pBlock = :: VirtualAlloc( NULL, // 不指定起始地址 c_dwGigabyte, // 要求1GB MEM_COMMIT, // 调配物理存储 PAGE_READWRITE) ; // 对此的读写操作 :: FillZero(pBlock, c_dwMegabyte) ; :: VirtualFree(pBlock, 0, MEM_RELEASE) ; } // 使用虚拟分配以获得虚拟1GB块 { LPVOID pBlock = :: VirtualAlloc( NULL, // 不指定起始地址 c_dwGigabyte, // 要求1GB MEM_RESERVE, // 不调配物理存储 PAGE_READWRITE) ; // 对此的读写操作 :: FillZero(pBlock, c_dwMegabyte) ; :: VirtualFree(pBlock, 0, MEM_RELEASE) ; } //使用虚拟分配调配获得虚拟1GB块,再为其调配1MB物理存储 { LPVOID pBlock = :: VirtualAlloc( NULL, // 不指定起始地址 c_dwGigabyte, // 要求1GB MEM_RESERVE, // 不调配物理存储 PAGE_READWRITE) ; // 对此的读写操作 :: VirtualAlloc( pBlock, c_dwMegabyte, MEM_COMMIT, PAGE_READWRITE) ; :: FillZero(pBlock, c_dwMegabyte) ; :: VirtualFree(pBlock, 0, MEM_RELEASE) ; } }