C++ 为什么VisualStudio诊断工具显示了如此多的内存使用?

C++ 为什么VisualStudio诊断工具显示了如此多的内存使用?,c++,memory,visual-studio-2015,diagnostic-tools,C++,Memory,Visual Studio 2015,Diagnostic Tools,我写了这段代码: #include "Colour.h" int main(int argc, char** argv) { //sizeof(Colour) = 3 Colour* data = new Colour[8 * 8]; for (int y = 0; y < 8 * 8; y++) { data[y] = Colour::WHITE; } } #包括“color.h” int main(int argc,字符*

我写了这段代码:

#include "Colour.h"

int main(int argc, char** argv) {

    //sizeof(Colour) = 3
    Colour* data = new Colour[8 * 8];

    for (int y = 0; y < 8 * 8; y++)
    {
        data[y] = Colour::WHITE;
    }
}
#包括“color.h”
int main(int argc,字符**argv){
//sizeof(颜色)=3
颜色*数据=新颜色[8*8];
对于(int y=0;y<8*8;y++)
{
数据[y]=颜色::白色;
}
}
在本例中,color是一个三字节大的结构

因此,我希望这个程序分配
8*8*3=192
字节。 但在诊断工具面板中,它显示了
889kb的使用情况

奇怪的是,当我进一步挖掘时,通过创建一个内存快照,它显示的堆大小为
71kB
。但是当查看源代码时,它只显示一个大小为192字节的分配

发生了什么事?
有没有可能它正在为堆栈帧分配所有的内存?

您的应用程序并不是真的在真空中浮动。当您启动它时,操作系统也会为您的应用程序输出创建一个窗口并启动它,在某个地方保留一个句柄。它为堆栈分配了一些内存(确切的内存量可能会有所不同,我认为可以自己更改)

进程本身本质上是一个容器,由内核进程对象表示。它还存储一些操作所需的数据。所有这些都需要内存,我想这就是为什么您(几乎为空)的进程分配了这么多内存

另外,如果您制作了两个快照,一个在应用程序执行的开始(在执行第一行之前),另一个在执行第一行之后,您将看到堆大小正好增加了您分配的内存量,并且大部分内存在您自己的代码被命中之前已经分配:


应用程序本身也会消耗内存。看一下output.EXE文件的大小。谢谢,这就为我清除了它。但是为什么VisualStudio不能只绘制代码和操作系统之间的内存差异呢?@CameronBell,为什么不绘制呢?它显示了内存分配的来源,应该足以区分您自己的分配和操作系统分配。在图中只留下自己代码的内存可能会产生误导,因为您仍然不知道应用程序总共使用了多少内存。