为什么 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 并启动它,并在某处持有它的句柄。它为堆栈分配了一些内存(具体数量可能会有所不同,我认为可以自己更改)。
进程本身本质上是一个容器,由内核进程对象表示。它还存储一些能够操作它所需的数据。以上所有都需要内存,我想这就是为什么你的(几乎是空的)进程分配了这么多。
此外,如果您制作两个快照,一个在您的应用程序开始执行时(在执行第一行之前),另一个在执行第一行之后,您会看到堆大小增加了大约完全按照您分配的内存量分配,大部分内存已在您自己的代码被命中之前分配:
这段代码是我写的:
#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 并启动它,并在某处持有它的句柄。它为堆栈分配了一些内存(具体数量可能会有所不同,我认为可以自己更改)。
进程本身本质上是一个容器,由内核进程对象表示。它还存储一些能够操作它所需的数据。以上所有都需要内存,我想这就是为什么你的(几乎是空的)进程分配了这么多。
此外,如果您制作两个快照,一个在您的应用程序开始执行时(在执行第一行之前),另一个在执行第一行之后,您会看到堆大小增加了大约完全按照您分配的内存量分配,大部分内存已在您自己的代码被命中之前分配: