这个话题已经有人讨论过了,但我仍然有疑问。要计算向量的大小,哪一个是正确的:
sizeof(VEC) + sizeof(int) * VEC.capacity()
或者VEC.capacity() * (sizeof(VEC) + sizeof(int))
sizeof(vec);
如果您想知道向量在堆上分配了多少内存,可以使用以下方法:
vec.capacity()*sizeof(T)
因此,如果您添加这些内容,您将得到由于向量而“丢失”的内存量。
vec.capacity()*sizeof(T) + sizeof(vec)
vector
能够有效实现的限制,这个给出了一个正确的vector
及其内容所占据内存量的下限。+1。 - Fred Foostd::vector<T>
的“最佳”方法是让实际对象存储指向元素起始位置的T
指针,并且让控制数据(std::vector<T>
的大小、容量和分配器)紧随其后。这种方法不一定是可移植的,但由于std::vector<T>
是实现的一部分,所以它不必是可移植的。除了std::vector<T>
的控制数据之外,内存管理系统通常还会在分配的内存前面添加几个字节。 - Dietmar Kühlstd::vector<int> vec;
...
vec.size() * sizeof(decltype(vec)::value_type))
std::vector<long long> vec; // lets go from int to int64
...
vec.size() * sizeof(int); // woops problem on the horizon