我如何知道std :: vector的已分配内存大小?

时间:2016-06-29 15:03:21

标签: c++ vector std

我知道我们可以使用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

5 个答案:

答案 0 :(得分:5)

使用成员函数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();

答案 1 :(得分:1)

真正的答案是,你做不到。其他人提出了经常有用的方法,但你不能依赖capacity以任何方式反映实际分配的内存。

首先,堆通常会分配比请求的内存更多的内存。这与分段等的优化有关... vector无法知道实际分配了多少内存,只知道它所请求的内容。

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

答案 2 :(得分:0)

答案 3 :(得分:0)

有关内存连续的强烈声明,因此大小为

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

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

答案 4 :(得分:0)

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

对于包含简单对象(例如 int )的向量,使用容量 sizeof 的建议解决方案可以正常工作。

相关问题