我只是在学习向量和结构体,有一次,我试着以字节为单位输出向量的大小。代码如下:
#include <iostream>
#include <vector>
struct Foo{
std::vector<int> a;
};
int main()
{
using std::cout; using std::endl;
Foo* f1 = new Foo;
f1->a.push_back(5);
cout << sizeof(f1->a) << endl;
cout << sizeof(f1->a[0]) << endl;
delete[] f1;
}
输出为24
和4
。
显然第二行打印了4,因为这是int的大小。但为什么另一个值是24呢?向量是否占用24字节的内存?谢谢!
2条答案
按热度按时间ryevplcw1#
虽然
std::vector
的公共接口是由标准定义的,但可以有不同的 * 实现 *:换句话说,std::vector
的底层内容可以随实现的不同而改变。即使在相同的实现中(例如:Visual C++的给定版本附带的STL实现),
std::vector
的内部结构可以在发布版本和调试版本之间发生变化。您看到的24大小可以解释为3个指针(每个指针在64位体系结构上大小为8字节;所以你有3 x 8 = 24字节)。这些指针可以是:
kxkpmulp2#
下面是来自libc++的代码(忽略压缩对,它是一个迭代器,用于维护向量的容量)。下面是实现中的3个指针。
由于指针在64位CPU上的大小为8字节,这就是为什么8*3 = 24字节。