我只是在闲逛并学习向量和结构,有一次,我尝试以字节为单位输出向量的大小。这是代码:
#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
and 4
.
显然第二行打印了 4,因为这是 int 的大小。但为什么另一个值是 24呢?向量占用24字节内存吗?谢谢!
虽然公共接口std::vector
由标准定义,可以有不同的实施:换句话说,在幕后是什么std::vector
可以从实施到实施发生变化。
即使在相同的实现中(例如:给定版本的 Visual C++ 附带的 STL 实现),std::vector
可以从发布版本和调试版本更改。
您看到的 24 大小可以解释为 3 个指针(在 64 位架构上每个指针的大小为 8 个字节;因此您有 3 x 8 = 24 个字节)。这些指针可以是:
- 向量的开始
- 向量末尾
- 向量保留内存的末尾(即向量的capacity)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)