好,所以我很好奇,看看一个int实际上是在我的内存上加4个字节。
所以我用这个代码做了1,000,000个整数。
for(int i = 0;i < 1000000;++i) int *as= new int;
在我执行这行代码之前,我先放一个断点,看看有多less头痛。
几乎没有头痛,我的程序开始于750 kb。
但是在完成循环之后,如果一个int值为32位,那么程序使用32,000kb的长度为4,000kb。
另外值得一提的是,我正在使用ctrl + altk + delete方法来检查我的程序从内存中获取了多less空间,并且在visual c ++ 2010 express上运行它。
我也是积极的,我的个人电脑上的int是32位,而不是64无论如何,因为即使是64而不是32它应该是8,000 kb,而不是32,000 kb。
所以也许你可以尝试在你的电脑上做这个,并告诉我,如果你有相同的结果。
函数如何存储在内存中?
当使用std :: vector与std :: List时,linux内存使用率在上面
如何捕捉使用sigsegv的内存读取和写入?
每当调用malloc / free时输出到stderr
无法在64位linux上预留9g堆
如果你知道我错了哪里,请告诉我。
Malloc没有失败,但系统正在失去内存
计算在linux上使用的%内存
什么时候 *** 作系统擦除一个进程的内存?
在不中断它的情况下读取活动进程内存(/ proc / kcore是一个选项)
从地址查找堆或堆块或段
4字节的内存块太小,不值得管理。 还有可能的性能损失与给共享高速缓存行的代码对象的可能不相关的块相关联。
典型的内存管理器的最小块大小在16到256字节之间。 而且,通常需要一些开销来跟踪特定大小的块已被分配的事实。
内存管理器有一些开销来跟踪不同的块。 他们也可以分配额外的位来帮助发现缓冲区溢出。 一些有他们将分配的最小大小块。
堆分配有一些开销,因为堆管理器给出的每块内存都有一些额外的信息(例如它的大小)。
而且,通常堆管理器不提供这样的小块,因为几乎没有人从堆中请求单个int (前面提到的额外的记账,除此之外,使得这么小的分配成为一个坏主意)。 所以,你得到的每个int都可能是堆管理的最小内存块,比int大几倍。
你在堆上分配整数指针而不是堆栈。
我看到每个int分配了4个字节(32位),而且每个指针也有8个字节(64位),并且分配给内存分配的开销。
总结以上是内存溢出为你收集整理的由于某种原因,内存在内存上的重量超过了32位全部内容,希望文章能够帮你解决由于某种原因,内存在内存上的重量超过了32位所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)