【发布时间】:2013-01-06 03:13:49
【问题描述】:
我使用此例程将未使用的 ram 填充为零。 它会在某些计算机上导致崩溃并且很粗糙 尺寸=尺寸-(尺寸/10); 有没有更准确的方法来确定未使用的 RAM 量以零填充?
DWORDLONG getTotalSystemMemory(){
PROCESS_MEMORY_COUNTERS lMemInfo;
BOOL success = GetProcessMemoryInfo(
GetCurrentProcess(),
&lMemInfo,
sizeof(lMemInfo)
);
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
wprintf(L"Mem: %d\n", lMemInfo.WorkingSetSize);
return statex.ullAvailPhys - lMemInfo.WorkingSetSize;
}
void Zero(){
int size = getTotalSystemMemory();//-(1024*140000)
size = size - (size /10);
//if(size>1073741824) size=1073741824; //2^32-1
wprintf(L"Mem: %d\n", size);
BYTE* ar = new BYTE[size];
RtlSecureZeroMemory(ar,size);
delete[] ar;
}
【问题讨论】:
-
从用户空间执行此操作的整个想法是错误的。您无法控制缓冲区映射到哪些 RAM 块。从病态上讲,它们都可以放入交换文件中,并在 RAM 的单个页面中循环,一次一个,并且没有其他页面被触及。
标签: windows visual-c++ ram