C++ 为变量分配异常大的内存

标签 c++ memory memory-management integer function-pointers

我最近知道一个整数从内存中占用 4 个字节。

首先运行这段代码,并测量内存使用情况:

int main()
{
   int *pointer;
}

enter image description here

  • 占用了 144KB。

然后我修改代码分配1000个整数变量

int main()
{
   int *pointer;

   for (int n=0; n < 1000; n++)
     { 
       pointer = new int ; 
     }
}

enter image description here

  • 然后花了 (168-144=) 24KB
    但假设 1000 个整数占用 (4bytes x 1000=) 3.9KB

然后我决定制作 262,144 个整数变量,它们应该消耗 1MB 内存

int main()
{
   int *pointer;

   for (int n=0; n < 262144; n++)
     { 
       pointer = new int ; 
     }
}

令人惊讶的是,现在需要 8MB

enter image description here

内存使用量随着整数的数量呈指数增长。
为什么会这样?

我使用的是 Kubuntu 13.04 (amd64)
请给我一点解释。 谢谢!

注意:sizeof(integer) 返回 4

最佳答案

单独分配的动态对象的内存不需要是连续的。事实上,由于 new char[N] 的对齐要求(即在 alignof(std::maxalign_t) 对齐,通常为 16),标准内存分配器可能永远不会费心返回任何内容 16 字节对齐的内存。所以每个int分配实际上消耗(至少)16 个字节。 (分配器可能需要更多内存用于内部簿记。)

道德当然是你应该使用std::vector<int>(1000000)合理处理一百万个动态整数。

关于C++ 为变量分配异常大的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16624438/

相关文章:

c++ - C++ 字符串类可以进行指针运算吗?

c++ - 在 OpenCV 中确定图像的数据类型

c++ - 如何在lambda运算中获取当前迭代器

C、Xcode 和内存

python - 如何估计 NetworkX 图形内存使用情况?

PHP数组操作时内存使用突然增加

ios - 由于存储在文档目录中的大量图像,应用程序正在接收内存警告。应用程序崩溃了

c++ - 向不存在的窗口发送消息好吗?

matlab - 使用 MATLAB R2012a 生成 2 MB 向量时出现内存不足错误

iphone - 在以下示例中释放 NSURLConnection 的正确位置是什么?