3d stl向量内存大小问题

时间:2014-05-06 06:48:12

标签: c++

 std::vector< std::vector< std::vector<int> > > sp(1, std::vector< std::vector<int> >(1,std::vector<int>(1)));

为这个3d矢量分配的内存应该是多少? Massif显示84个字节,但不应该接近int的大小(4个字节)?

4 个答案:

答案 0 :(得分:4)

当您使用STL时,您必须考虑您的数据结构不仅由数据本身组成,还由元数据组成。它们是对象而不是内存区域。

对于每个矢量对象,您有几个属性。看看:

http://en.cppreference.com/w/cpp/container/vector

答案 1 :(得分:2)

通常使用3个指针实现单个std::vector

  • 指向已分配区域开头的指针
  • 指向有效数据结尾的指针
  • 指向已分配区域末尾的指针(保留空间)

因此,在64位平台上,当然除了实际内容之外,它至少有3x8 = 24字节。

因此,具有一个整数的3d向量将占据至少24x3 + sizeof(int)= 76个字节,假设整数是4个字节。使用8字节整数将是80字节,不计算堆分配器所需的任何额外对齐。

答案 2 :(得分:1)

通过手工微积分,似乎每个向量在开始时保持7个元素。因此7*sizeof(int)*3 = 84

答案 3 :(得分:1)

为什么它应该接近4个字节? std :: vector是一个不仅仅是元素属性的类!如果你的内存不足,你可能不应该使用std :: vector,只需使用一个数组或你自己的更接近标准数组大小的ArrayList实现!