?? 5-3.cpp
字號:
// 工程largealloc
# 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;
}
}
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) ;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -