我怎么知道std :: vector的分配记忆大小

How can I know the allocated memory size of a std::vector?

本文关键字:记忆 分配 std vector 我怎么知道      更新时间:2023-10-16

我知道我们可以使用size()函数来获得向量大小,例如:

   std::vector<in> abc;
   abc.resize(3);
   abc.size();

我的问题是我怎么知道向量的内存大小?举一个例子:

std::vector<int> abc;
abc.reserve(7);
//the size of memory that has been allocated for abc

您使用成员函数capacity()获得分配的容量

std::vector<int> abc;
abc.reserve(7);
std::cout << abc.capacity() << std::endl;

要通过字节分配内存,您可以做:

sizeof(int) * abc.capacity();

这是给出的,您知道您的value_typeint。如果您不

sizeof(decltype(abc.back())) * abc.capacity();

真正的答案是您不能。其他人建议通常会起作用的方法,但是您不能以任何分配的实际内存来反映capacity

一方面,堆通常会分配比要求更多的内存。这与针对分裂等的优化有关... vector无法知道实际分配了多少内存,只有它要求的内容。

所以capacity充其量会给您一个非常粗略的估计。

使用capacity成员函数-http://en.cppreference.com/w/cpp/container/container/vector/capacity

连续的内存上有很强的语句,因此大小为

sizeof( abc[0] ) * abc.capacity();

(  (char*)(&abc[1]) - (char*)(&abc[0] ) ) * abc.capacity();

因为std :: vector可以存储复杂的对象(例如std :: string),它们具有内部内存管理并可能分配其他内存,确定总内存使用情况可能很难。

对于包含简单对象的向量,例如 int ,建议使用 apcation sizeof 的建议解决方案可行。

<</p>