全て
次の関数を使用して、使用可能なメモリとヒープ内の最大連続ブロックに関する情報を取得します。
int GetLargestContiguousMemory()
{
MEMORY_BASIC_INFORMATION mbi;
DWORD start = 0;
bool recording = false;
DWORD freestart = 0, largestFreestart = 0;
__int64 free = 0, largestFree = 0; while (true)
{
// SIZE_T s = VirtualQueryEx(hproc, reinterpret_cast<lpvoid>(start), &mbi, sizeof(mbi));
SIZE_T s = VirtualQueryEx(GetCurrentProcess(), (void*)(start), &mbi, sizeof(mbi));
if (s != sizeof(mbi))
{
if (GetLastError() != ERROR_INVALID_PARAMETER)
//return ReportError(GetLastError(), _T("Failed to VirtualQueryEx at %08x"), start);
printf("Failed to VirtualQueryEx at %08x", start);
else
break;
}
if (mbi.State == MEM_FREE)
{
if (!recording)
freestart = start;
free += mbi.RegionSize;
recording = true;
}
else
{
if (recording)
{
if (free > largestFree)
{
largestFree = free;
largestFreestart = freestart;
}
}
free = 0;
recording = false;
}
start += mbi.RegionSize;
}
return largestFree;
}
int GetHeapAvailableMemory()
{
MEMORY_BASIC_INFORMATION mbi;
DWORD start = 0;
bool recording = false;
DWORD freestart = 0, largestFreestart = 0;
__int64 free = 0, largestFree = 0;
while (true)
{
// SIZE_T s = VirtualQueryEx(hproc, reinterpret_cast<lpvoid>(start), &mbi, sizeof(mbi));
SIZE_T s = VirtualQueryEx(GetCurrentProcess(), (void*)(start), &mbi, sizeof(mbi));
if (s != sizeof(mbi))
{
if (GetLastError() != ERROR_INVALID_PARAMETER)
//return ReportError(GetLastError(), _T("Failed to VirtualQueryEx at %08x"), start);
printf("Failed to VirtualQueryEx at %08x", start);
else
break;
}
if (mbi.State == MEM_FREE)
{
if (!recording)
freestart = start;
free += mbi.RegionSize;
}
start += mbi.RegionSize;
}
return free;
}
私のプログラムでは、演算子 new を使用してループ内でメモリを割り当てていますが、上記の関数は数回の繰り返しで同じ値を返し、返される値が突然変化します。ヒープで使用可能なメモリのサイズが 8M バイト減少したことを示しています。私はそれを理解できません。ヒープ内の使用可能なメモリのサイズを返す関数は正しいですか?
ありがとう。ジョギング