我怎么知道std::vector分配的内存大小?

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

我了解到我们可以使用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成员函数-http://en.cppreference.com/w/cpp/container/vector/capacity

内存是连续的,所以大小是

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

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

由于std::vector可以存储复杂的对象(例如std::string),这些对象具有内部内存管理并可能分配额外的内存,因此很难确定总内存使用量。

对于包含简单对象的向量,例如int,建议的解决方案使用capacitysizeof 会起作用。

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

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

所以 capacity 充其量只能给你一个非常粗略的估计。