C++ 3d stl矢量内存大小问题 std::vectorsp(1,std::vector(1,std::vector(1));
该3d矢量的内存分配应该是什么?C++ 3d stl矢量内存大小问题 std::vectorsp(1,std::vector(1,std::vector(1));,c++,C++,该3d矢量的内存分配应该是什么? Masf显示了84个字节,但是它不应该接近int(4字节)的大小吗?< p>当你使用STL时,你必须考虑到你的数据结构不仅由数据本身组成,而且由元数据组成。它们是对象而不是内存区域 对于每个向量对象,都有几个属性。看看: 通过手工计算,似乎每个向量在开始时包含7个元素。因此7*sizeof(int)*3=84为什么它应该接近4字节?vector是一个不仅仅具有元素属性的类!如果内存不足,您可能不应该使用std::vector,而应该使用一个数组或您自己实现的更接
Masf显示了84个字节,但是它不应该接近int(4字节)的大小吗?< p>当你使用STL时,你必须考虑到你的数据结构不仅由数据本身组成,而且由元数据组成。它们是对象而不是内存区域 对于每个向量对象,都有几个属性。看看:
通过手工计算,似乎每个向量在开始时包含7个元素。因此
7*sizeof(int)*3=84
为什么它应该接近4字节?vector是一个不仅仅具有元素属性的类!如果内存不足,您可能不应该使用std::vector,而应该使用一个数组或您自己实现的更接近标准数组大小的ArrayList 通常使用3个指针实现单个std::vector
- 指向所分配区域开头的指针
- 指向有效数据结尾的指针
- 指向已分配区域(保留空间)末尾的指针
因此,如果整数为4个字节,则具有一个整数的3d向量将至少占用24x3+sizeof(int)=76个字节。对于8字节,整数将是80字节,不包括堆分配器所需的任何额外对齐。感谢您的解释,这似乎是一种开销。所以如果我做std::vector
std::vector
通常分配的内存块大于它立即需要的内存块。这是为了避免在增长过程中出现过多的重新分配。查看std::vector::capacity
和std::vector::size
之间的差异。感谢您的输入,但这是我做的第一件事,容量是1、1和2,与预期的一样
std::vector< std::vector< std::vector<int> > > sp(1, std::vector< std::vector<int> >(1,std::vector<int>(1)));