为什么 visual studio 诊断工具显示如此多的内存使用情况?

Why is visual studio Diagnostic Tools showing soo much memory usage?

这段代码是我写的:

#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 是一个三字节大的结构

因此我希望这个程序分配 8 * 8 * 3 = 192 字节。 但是在诊断工具面板中显示了 889 kB ?

的用法

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

这是怎么回事? 是否有可能为堆栈帧分配所有内存?

好吧,您的应用程序并不是真的漂浮在真空中。当您启动它时,OS 还会为您的应用程序输出创建一个 window 并启动它,并在某处持有它的句柄。它为堆栈分配了一些内存(具体数量可能会有所不同,我认为可以自己更改)。

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

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