VMMap 报告 ~100 GB 分配
VMMap reports ~100 GB allocations
我有一个应用程序,恐怕有内存泄漏。
使用 VMMAP 进行调查,我发现大部分分配都是保留内存。它不应该影响性能......?
问题仍然是 - 保留这么多内存的原因可能是什么(我该如何调查它?)它会在某个阶段影响性能吗?
此 Microsoft 文档页面可以解释保留内存的含义 - https://docs.microsoft.com/en-us/windows/win32/memory/page-state
您可以安全地预留大量内存,没有任何问题(在 x64 构建中,您看起来就是这种情况)
我成功为下一个代码预留了 30000 GB 的内存
#include "Windows.h"
int main()
{
static const size_t allocationSize = 512 * 1024 * 1024;
size_t allocated = 0;
while (true)
{
void* data = ::VirtualAlloc(NULL, allocationSize, MEM_RESERVE, PAGE_READWRITE);
if (data == nullptr)
{
HRESULT hr = GetLastError();
::DebugBreak();
}
allocated += allocationSize;
}
}
我有一个应用程序,恐怕有内存泄漏。
使用 VMMAP 进行调查,我发现大部分分配都是保留内存。它不应该影响性能......?
问题仍然是 - 保留这么多内存的原因可能是什么(我该如何调查它?)它会在某个阶段影响性能吗?
此 Microsoft 文档页面可以解释保留内存的含义 - https://docs.microsoft.com/en-us/windows/win32/memory/page-state
您可以安全地预留大量内存,没有任何问题(在 x64 构建中,您看起来就是这种情况)
我成功为下一个代码预留了 30000 GB 的内存
#include "Windows.h"
int main()
{
static const size_t allocationSize = 512 * 1024 * 1024;
size_t allocated = 0;
while (true)
{
void* data = ::VirtualAlloc(NULL, allocationSize, MEM_RESERVE, PAGE_READWRITE);
if (data == nullptr)
{
HRESULT hr = GetLastError();
::DebugBreak();
}
allocated += allocationSize;
}
}