【发布时间】:2021-09-04 20:12:55
【问题描述】:
#include <iostream>
#include <vector>
int main(int argc, char const *argv[])
{
std::vector<int> a(32768, 0);
std::cout << "Size " << sizeof a << "\nCapacity " << a.capacity() << "\nElements " << a.size();
return 0;
}
对于这个程序,我得到了输出:
Size 24
Capacity 32768
Elements 32768
使用 valgrind 我计算了堆使用量:
132096 字节
即(32768 x 4 字节)+ 24 字节
我对向量 a 如何使用这 24 个字节感兴趣
【问题讨论】:
-
例如stackoverflow.com/questions/30422205/… 是否回答了您的问题?
that is (32768 x 4 bytes) + 24 bytes那是……巧合,它等于那个。 -
这 24 个字节可能与实现有关。如果您想了解更多,只需打开
头文件 :) 您还可以查找“小向量优化”。 -
@KamilCuk 谢谢你解释了这一切:)
-
@PKramer 是的,谢谢你的建议
-
一个向量从空闲存储区分配内存(通常是堆,或者它在我目前工作的所有平台上)。当容量不足时,它会分配更多内存。除非请求,否则它不会释放额外容量的内存。我的系统为
malloc、new和new[]维护单独的堆......但这是一个实现细节,有助于消除内存管理错误。