【发布时间】:2016-03-15 06:53:27
【问题描述】:
在我的 MS VS 2015 编译器上,sizeof int 是 4(字节)。但是sizeofvector<int>是16。据我所知,一个vector在它还没有初始化的时候就像一个空盒子,那为什么它是16呢?为什么是 16 而不是其他数字?
此外,如果我们有vector<int> v(25);,然后用整数初始化它,那么v 的大小仍然是16,尽管它有25 个int 数字!每个 int 的大小是 4,所以 sizeof v 看起来应该是 25*4 字节,但实际上它仍然是 16!为什么?
【问题讨论】:
-
你能检查
int *变量的大小吗?我认为 16 是您机器中的指针大小 -
sizeof (int*)是 4。 -
类型的大小不会随其内容而变化,这是一个基本的 C++ 规则。例如:
char *j = "hello": char *k = "goodbye";。由于j和k都是char *类型,因此它们占用的字节数相同。他们可以用来访问的东西的大小无关紧要。 -
我建议你编写自己的'vector'类以便更好地理解。从非模板开始,然后模板化您的矢量类。你会得到扎实的理解!
-
@niyasc 实现
std::vector至少需要3 个指针大小的对象(或者实际上是一个指针和两个std::size_t大小的对象)。在 32 位系统上,具有 4 字节指针并允许对齐,对于std::vector,16 是合理的大小。