Ted*_*ing -1 c++ struct vector
对于以下结构体,由于 v 是动态分配的对象,那么内存对齐如何工作?struct S即使 v 的大小变大,其大小也是恒定的吗?那么 v 本质上是作为一个指针(或者某种指针的包装器)工作的吗?
struct S {
ANY_TYPE a;
std::vector<ANY_TYPE> v;
} s;
Run Code Online (Sandbox Code Playgroud)
如果上述所有问题的答案都是肯定的,那么随着 v 大小的变化,其成员的内存存储在哪里?这些内存是在堆上还是在堆栈上?
编辑:我看到这个问题的反对票,并意识到我应该对 std::vector 本身进行更多研究。我读了这篇文章,一切都清楚了。感谢您的回答!
v不是动态分配的。其std::vector本身是S对象的一部分。 v然而,它拥有一个动态分配的缓冲区。
这意味着它sizeof(S)是恒定的。永远都是sizeof(ANY_TYPE) + sizeof(std::vector<ANY_TYPE>) + padding。
本质上,S将在内存中布局如下(可能在a和之间有一些填充v以保持对齐):
S
+---+
| |
| a |
| |
+---+
| |
| v | dynamically allocated buffer
| | +------+------+-----+
| +----> v[0] | v[1] | ... |
| | +------+------+-----+
+---+
Run Code Online (Sandbox Code Playgroud)