出于某种原因,一个int在我的ram上的重量超过了32位

An int weighs more then 32 bits on my ram for some reason

本文关键字:32位 过了 ram 我的 某种原因 一个 int      更新时间:2023-10-16

好的,所以我很想看看int在我的ram上是否真的有4个字节的权重
所以我用这个代码做了1000000 int。

for(int i = 0;i < 1000000;++i)   
int *as= new int;  

在执行这行代码之前,我在前面放了一个断点,看看我从多大程度上开始
我的程序从750kb开始,几乎没有任何溢出现象。

但在我完成循环后,程序使用32000kb,而如果int的重量为32位,则它的上限为4000kb
另一件值得一提的事情是,我正在使用ctrl+altk+delete方法来检查我的程序从ram占用了多少空间,并且我正在visual c++2010 express上运行它。

我也确信我电脑上的int是32位而不是64位,这无论如何都不重要,因为即使它是64位而不是32位,它也应该是8000 kb而不是32000 kb
所以也许你可以试着在你的电脑上做这件事,并告诉我你是否有同样的结果。

如果你知道我哪里错了,请告诉我。

4字节的内存块太小,不值得管理。提供共享缓存行的可能不相关的代码对象块也可能会带来性能损失。

典型的存储器管理器具有介于16和256字节之间的最小块大小。此外,通常需要一些开销来跟踪已经分配了特定大小的块的事实。

内存管理器有一些开销来跟踪不同的块。它们还可以分配额外的位来帮助发现缓冲区溢出。有些具有他们将分配的最小大小块。

堆分配会带来一些开销,因为堆管理器提供的每个内存块都有一些额外的信息(例如大小)。

此外,通常堆管理器不提供这么小的块,因为几乎没有人从堆中请求单个int(除其他外,上述额外的bookkepping使这么小的分配成为一个坏主意);因此,您获得的每个int可能是堆管理的最小内存块,比int大几倍。

您在堆上而不是堆栈上分配整数指针。

我看到每个int分配了4个字节(32位),但每个指针和内存分配的分配开销也有8个字节(64位)。