4

如果我像这样声明一个向量:

int main() {
    vector<string> names;
    int something_else_on_the_stack = 0;
    names.add("John");
    names.add("Annie");
}

您实际上如何能够将元素“添加”到名称向量中?如果名称是堆栈分配的,“something_else_on_the_stack”不应该在堆栈上紧随其后吗?那么如何将名称添加到已分配的向量中?

4

3 回答 3

8

在内部,avector<string>很可能包括一个string*指向实际数据的指针和可能另外两个size_t指示占用和保留内存的成员。其余的都将在堆上。因此,sizeof(vector<string>)是固定的,堆栈上的分配不会改变。

于 2012-09-20T06:31:24.270 回答
7

std::vectorinternaly 维护一个指向堆分配空间的指针,该指针根据需要调整大小。堆栈上的足迹不会改变。

于 2012-09-20T06:30:41.993 回答
2

a 在堆栈上占用的大小vector<string>是固定的,通常等于 3 个指针的大小(这是特定于实现的)。指针指向存储的开始、向量容量和向量大小。这些指针指向向量根据需要分配的空闲存储内存(或堆,如果你想调用它)来保存你添加到向量中的对象。

于 2012-09-20T06:34:41.953 回答