sizeof() in C++, confuse...
#include <vector>
#include <iostream>
using std::vector;
int main()
{
vector <int> inet(10);
std::cout < <sizeof(inet) < <std::endl;
return 0;
}
我想看看这样用sizeof()能得到什么,是不是会向对数组那样得到整个数组的大小,结果显示无论元素是10个还是n个,运行结果都是20,为什么?sizeof()到底返回了什么的大小?
[解决办法]
sizeof() 是个编译期行为
无论你vector.size()是多少,都是一样的,都是sizeof(std::vector),
vector里的数据是在堆上的,是运行时分配的
[解决办法]
sizeof得到的永远是这个对象本身的大小。
但一个对象很小,不代表它内部不可以拥有指向很大的缓冲区的指针。
这就好比一个指针变量的大小只有4个字节,不代表它所指向的对象的大小也必须都是4个字节。
你想获得vector中元素的个数,应该使用vector::size成员函数;想获得已分配缓冲区的大小,可以使用vector::capacity成员函数。
[解决办法]
vector中数据是_Allocator来分配。就算是default的_Allocator也要看STL的具体实现。可不一定是在堆上。
大多数的STL好象都是用内存池的,不过最近听说内存池又不划算了。又改回用new了。