sizeof()std :: vector(C++)

Shi*_*bli 11 c++ vector sizeof

关于这个话题已有一个话题,但我仍有疑虑.要计算向量的大小,哪一个是正确的:

sizeof(VEC) + sizeof(int) * VEC.capacity()
Run Code Online (Sandbox Code Playgroud)

要么

VEC.capacity() * (sizeof(VEC) + sizeof(int))
Run Code Online (Sandbox Code Playgroud)

Arm*_*yan 16

你对矢量的大小是什么意思?矢量对象的大小就是

sizeof(vec);
Run Code Online (Sandbox Code Playgroud)

如果您对向量在堆上分配了多少内存感兴趣,可以使用

vec.capacity()*sizeof(T)
Run Code Online (Sandbox Code Playgroud)

所以,如果你添加这些,你会得到你因为向量而"丢失"了多少内存.

vec.capacity()*sizeof(T) + sizeof(vec)
Run Code Online (Sandbox Code Playgroud)

请注意,确切分配了多少内存取决于实现.只是在大多数(如果不是全部)实现中,上面的公式实际上是正确的(或近似正确的).

  • @Dietrich:你真的看过我的回答吗? (9认同)
  • 关于_practically_ correct:实现`std :: vector <T>`的"最佳"方法是让实际对象存储一个指向`T`的指针,该指针指向元素的开头并具有控制权数据(`std :: vector <T>的大小,容量和分配器)紧跟在值之前.这种方法不一定是可移植的,但它不一定是因为`std :: vector <T>`是实现的一部分.除了`std :: vector <T>的控制数据之外,内存管理系统通常还在分配内存前添加几个字节. (2认同)