sizeof() std::vector (C++)

问题描述 投票:0回答:3

已经有一个关于这个主题的主题,但我仍然有疑问。计算向量的大小,哪一个是正确的:

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

VEC.capacity() * (sizeof(VEC) + sizeof(int))
c++ vector sizeof
3个回答
22
投票

向量的大小是什么意思?矢量对象的大小仅为

sizeof(vec);

如果您对向量在堆上分配了多少内存感兴趣,可以使用

vec.capacity()*sizeof(T)

因此,如果添加这些,您将得到由于向量而“丢失”了多少内存。

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

请注意,到底分配多少内存取决于实现。只是上面的公式在大多数(如果不是全部)实现上“实际上”是正确的(或近似正确的)。


4
投票

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

如果类型从 int 更改为 long long,则无需更改其他任何内容。我发现这个解决方案比使用 sizeof 中的类型的解决方案更安全,因为它可以轻松更改而无需另一个。

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



0
投票

std::vector<int> vec; ... sizeof(vec.data());

这相当于@Mario的较长答案:

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

© www.soinside.com 2019 - 2024. All rights reserved.