我知道我们可以使用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
答案 0 :(得分:5)
使用成员函数capacity()
获取分配的容量
std::vector<int> abc;
abc.reserve(7);
std::cout << abc.capacity() << std::endl;
要获取以字节为单位分配的内存,您可以执行以下操作:
sizeof(int) * abc.capacity();
我们知道您value_type
是int
。如果你没有
sizeof(decltype(abc.back())) * abc.capacity();
答案 1 :(得分:1)
真正的答案是,你做不到。其他人提出了经常有用的方法,但你不能依赖capacity
以任何方式反映实际分配的内存。
首先,堆通常会分配比请求的内存更多的内存。这与分段等的优化有关... vector
无法知道实际分配了多少内存,只知道它所请求的内容。
所以capacity
充其量只能给你一个非常粗略的估计。
答案 2 :(得分:0)
使用capacity
成员函数 - http://en.cppreference.com/w/cpp/container/vector/capacity
答案 3 :(得分:0)
有关内存连续的强烈声明,因此大小为
sizeof( abc[0] ) * abc.capacity();
或
( (char*)(&abc[1]) - (char*)(&abc[0] ) ) * abc.capacity();
答案 4 :(得分:0)
由于std :: vector可以存储具有内部内存管理并可能分配额外内存的复杂对象(例如std :: string),因此确定总内存使用量可能很难。
对于包含简单对象(例如 int )的向量,使用容量和 sizeof 的建议解决方案可以正常工作。