2012-01-08 145 views
8

这个主题已经有一个主题,但我仍然有疑问。要计算一个向量的大小,哪一个是正确的:sizeof()std :: vector(C++)

sizeof(VEC) + sizeof(int) * VEC.capacity() 

VEC.capacity() * (sizeof(VEC) + sizeof(int)) 
+0

[载体的sizeof()的可能重复(http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe 2012-01-08 13:56:26

+4

@jrok:这只是一个猜测,这取决于如何实施有效。 – 2012-01-08 13:56:34

回答

12

你说的矢量的大小是什么意思?矢量对象的大小仅仅是

sizeof(vec); 

如果你有兴趣有多少内存的载体已经在堆上分配,则可以使用

vec.capacity()*sizeof(T) 

所以,如果你添加这些,你”会得到你因为矢量而“失去”了多少内存。

vec.capacity()*sizeof(T) + sizeof(vec) 

请注意,具体分配多少内存取决于实现。只是上面的公式将是实际上在大多数(如果不是全部)实现上是正确的(或大致正确)。

+1

这只是一个猜测,取决于实现的工作方式。 – 2012-01-08 13:56:49

+9

@Dietrich:你真的看过我的回答吗? – 2012-01-08 13:57:25

+0

我认为,考虑到'vector' *可以被有效实现的约束条件,这给了'vector'及其内容占用的内存量的正确*下限*。 +1。 – 2012-01-08 13:59:18

0

如果你想如果类型从int改口说很久很久没有别的要改变认识包含矢量

std::vector<int> vec; 
... 
vec.size() * sizeof(decltype(bufferIn)::value_type)) 

中的数据的大小。我发现这个解决方案比使用sizeof中的类型更安全,因为它可以轻松地在没有其他的情况下进行更改。

std::vector<long long> vec; // lets go from int to int64 
... 
vec.size() * sizeof(int); // woops problem on the horizon