【发布时间】:2013-02-27 14:37:46
【问题描述】:
我正在做一个项目,我需要在内存使用方面尽可能地刻薄。我正在尝试计算示例中大小为32 的vector<bool> 的总大小:
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
所以根据这个计算,大部分内存都花在了大小为32 的向量对象上。我的问题是为什么 vector 对象需要使用这么多内存?还有我的计算有什么错误吗?如果不对32 左右的向量大小进行按位操作,我如何才能提高效率?
【问题讨论】:
-
在您展示的示例中看不到任何指针。
-
vector<bool>是特例,有特殊处理。 -
很多误解...'size()==32' 表示你有 32 位,这是正确的。 'capacity()==64' 意味着您可以再添加 32 个,并且可能与 integer 的大小无关(
int在大多数平台上通常为 32 位)。请注意,您所说的 vector pointer 实际上是 vector object -
@AlokSave 啊对,但我不知道该怎么称呼它。
-
向量持有多个指针(否则将无法工作!)。