std::vector< std::vector< std::vector<int> > > sp(1, std::vector< std::vector<int> >(1,std::vector<int>(1)));
为这个3d矢量分配的内存应该是多少? Massif显示84个字节,但不应该接近int的大小(4个字节)?
答案 0 :(得分:4)
当您使用STL时,您必须考虑您的数据结构不仅由数据本身组成,还由元数据组成。它们是对象而不是内存区域。
对于每个矢量对象,您有几个属性。看看:
答案 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实现!