我正在做一个项目,我需要在内存使用方面尽可能地刻薄。vector<bool>
我正在尝试计算示例中 a of size的总大小32
:
vector<bool> v(32);
cout << "sizeof: " << sizeof(v) << endl;
cout << "size: " << v.size() << endl;
cout << "capacity: " << v.capacity() << endl;
cout << "max_size: " << v.max_size() << endl;
这给了我:
sizeof: 40 <- 40 byte? wtf?
size: 32 <- hoping an element takes up 1 bit
(instead of the usual 1 byte for booleans)
this should take around 32 bit memory
capacity: 64 <- I guess this is because minimum size is
1 integer = 64 bit
max_size: 9223372036854775744 <- relevant somehow?
在我的 64 位 ubuntu 12.04 机器上。所以我想我可以像这样计算内存:
40 * 8 + 64 * 1 = 384 bit = 48 byte
所以根据这个计算,大部分内存都花在了 size 的向量对象上32
。我的问题是为什么一个vector
对象需要使用这么多内存?还有我的计算有什么错误吗?如果不自己对矢量大小进行按位操作,我怎样才能提高效率32
?