Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 出于某种原因,int在我的ram上的权重超过32位_C++_Windows_Visual Studio 2010_Visual C++_Memory - Fatal编程技术网

C++ 出于某种原因,int在我的ram上的权重超过32位

C++ 出于某种原因,int在我的ram上的权重超过32位,c++,windows,visual-studio-2010,visual-c++,memory,C++,Windows,Visual Studio 2010,Visual C++,Memory,好的,所以我很想知道一个int在我的ram上是否有4个字节的权重。 所以我用这个代码做了1000000个整数 for(int i = 0;i < 1000000;++i) int *as= new int; for(int i=0;i 我还肯定,我电脑上的int是32位而不是64位,这并不重要,因为即使它是64位而不是32位,也应该是8000 kb而不是32000 kb。 所以,也许你可以试着在你的电脑上这样做,告诉我你是否有同样的结果 如果你知道我哪里出错了,请告诉我

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

for(int i = 0;i < 1000000;++i)   
    int *as= new int;  
for(int i=0;i<1000000;++i)
int*as=新的int;
在执行这一行代码之前,我在代码的前面放置了一个断点,以查看我开始时的头距有多大。
几乎没有头像,我的程序以750KB开始

但在我完成循环后,如果int的值为32位,则当其上限为4000 kb时,程序将使用32000 kb。
另一件值得一提的是,我使用CTRL+ALTK+DELATE方法来检查我的程序从RAM中获取了多少空间,我在Visual C++ 2010 Express上运行它。p> 我还肯定,我电脑上的int是32位而不是64位,这并不重要,因为即使它是64位而不是32位,也应该是8000 kb而不是32000 kb。
所以,也许你可以试着在你的电脑上这样做,告诉我你是否有同样的结果


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

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


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

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

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


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

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


另外,通常堆管理器不提供这样小的块,因为几乎没有人从堆中请求单个
int
s(前面提到的额外簿记,以及其他一些事情,使得这样小的分配成为一个坏主意);因此,您得到的每个
int
都可能是堆管理的最小内存块,比
int

大几倍除了
int
可能大于4个字节之外,堆不是线性数据结构,因此,除了实现对每次分配的簿记信息外,它可能分配了比任何特定时刻实际占用的内存更多的内存。这到底是如何工作的?如果在调试模式下构建,您的程序不会也会消耗更多内存吗?现在尝试分配一个100万整数的单个数组,或者十个数组,每个数组有十万个整数,然后比较一下。。。谈论堆开销。。。你为什么不直接去
int*chunk=newint[1000000]?嗯,我不知道你有一篇好文章可以让我从中学习内存管理吗?@user1680034,很多细节我自己都不知道。这些只是我随着时间的推移收集到的小道消息。关于数据对齐(填充)呢?“几乎没有人要求从堆中获取单个整数”-显然,您的代码库与我的不同。有些人就是不知道。内存管理器可能根据大小有不同的堆。这将减少内存碎片。嵌入式系统中常用的一种技术。