【发布时间】:2021-07-10 16:46:27
【问题描述】:
这可能是一个普遍的问题,但这个问题确实让我感到困惑。
我有两个不同的 C++ 应用程序,使用 Visual Studio 2012 编译,需要相同对象的实例。我在创建每个对象之前放置了一个断点,以通过步进我的程序来测量 RAM 使用情况。创建对象后,第一个应用程序占用大约 2.5 MiB 的 RAM,而第二个应用程序占用 30 MiB!
这两个对象都是使用具有相同参数的简单调用 new 创建的。构造函数后面的代码是一样的。
作为细节:第一个项目包含的 .cpp 文件比第二个项目少得多。所以我认为这可能是exe内部碎片的问题。另外,我还尝试在 main 函数中执行任何代码之前进行中断,并且内存使用量已经大不相同(第一个应用程序为 6 MiB,第二个应用程序为 35 MiB)。
有人知道会发生什么吗?
编辑: 所述对象是 DirectX 上下文,具有创建 Direct3D 实例和设备的构造函数。实例和设备的创建方式相同,但两个应用之间的 RAM 使用量不同。
这是创建 D3D 设备的代码:
d3d_presentParams = new D3DPRESENT_PARAMETERS; ZeroMemory( d3d_presentParams, sizeof(D3DPRESENT_PARAMETERS) );
d3d_presentParams->Windowed = !window->isFullscreen();
d3d_presentParams->SwapEffect = D3DSWAPEFFECT_DISCARD;
d3d_presentParams->hDeviceWindow = window->getHwnd();
d3d_presentParams->MultiSampleType = antiAlias;
d3d_presentParams->EnableAutoDepthStencil = true;
d3d_presentParams->AutoDepthStencilFormat = D3DFMT_D32F_LOCKABLE;
d3d_presentParams->PresentationInterval = (info.m_vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE);
{
d3d_presentParams->BackBufferCount = 1;
d3d_presentParams->BackBufferFormat = D3DFMT_A8R8G8B8;
d3d_presentParams->BackBufferWidth = m_viewportSize.x;
d3d_presentParams->BackBufferHeight = m_viewportSize.y;
}
d3d->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
window->getHwnd(),
D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED,
d3d_presentParams,
&d3d_device);
编辑 2: 问题目前已“解决”。请参阅下面的答案。
【问题讨论】:
-
贴出代码,否则我们瞎拍。 (但要尽可能小!)
标签: c++ visual-studio ram