为什么visual studio Diagnostic Tools显示出太多的内存使用量?

时间:2017-01-20 05:35:09

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

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

的用法

enter image description here

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

发生了什么事? 是否有可能为堆栈帧分配所有内存?

1 个答案:

答案 0 :(得分:1)

那么你的应用程序并没有真正漂浮在真空中。当您启动它时,操作系统还会为您的应用程序输出创建一个窗口并启动它,并在某处保留一个句柄。它为堆栈分配了一些内存(具体数量可能会有所不同,我认为可以自行更改)。

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

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

enter image description here