我怎么知道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_type
是 int
。如果你不
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,建议的解决方案使用capacity和sizeof 会起作用。
真正的答案是你不能。其他人建议的方法通常会起作用,但您不能依赖 capacity
以任何方式反映实际分配的内存。
一方面,堆通常会分配比请求更多的内存。这与针对碎片的优化等有关...vector
无法知道实际分配了多少内存,只能知道它请求的内存。
所以 capacity
充其量只能给你一个非常粗略的估计。
我了解到我们可以使用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_type
是 int
。如果你不
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,建议的解决方案使用capacity和sizeof 会起作用。
真正的答案是你不能。其他人建议的方法通常会起作用,但您不能依赖 capacity
以任何方式反映实际分配的内存。
一方面,堆通常会分配比请求更多的内存。这与针对碎片的优化等有关...vector
无法知道实际分配了多少内存,只能知道它请求的内存。
所以 capacity
充其量只能给你一个非常粗略的估计。