我正在尝试了解std :: vector实例占用的字节数。以下代码:
vector <int>uno;
uno.push_back(1);
uno.push_back(1);
cout <<"1: "<< sizeof(uno)<<" bytes"<<endl;
cout << endl;
vector <bool>unos;
unos.push_back(true);
cout <<"2: "<< sizeof(unos)<<" bytes"<<endl;
cout << endl;
给了我这个输出:
1:12字节
2:20字节
有人可以解释为什么vector<bool>
的大小比vector<int>
的字节多吗?什么是测量矢量实例的字节大小的正确方法...通过添加矢量中每个成员的大小?
答案 0 :(得分:4)
在C ++中,sizeof
运算符始终在编译时进行评估,因此每个vector<T>
都具有相同的大小(除非vector<T>
是专门化的vector<bool>
)。
如果您想知道12个字节,那可能是3个指针的大小,或者是指针的大小,元素数量和容量。真实数据永远不会存储在vector
。
如果你想知道总共使用了多少内存,一个很好的近似值是:
sizeof(std::vector<T>) + my_vector.capacity() * sizeof(T)
这只是一个近似值,因为它没有考虑堆上的簿记数据。
答案 1 :(得分:3)
std::vector<bool>
更大,因为它比std::vector<int>
更复杂。当前的C ++标准指定vector<bool>
数据应该是位打包的。这需要一些额外的簿记,并且与正常的std::vector<T>
相比,它们的行为略有不同。
即将推出的C ++ 0x标准很可能会删除std::vector<bool>
的这种不同行为。