堆栈分配的向量如何在c ++中扩展?

aer*_*ain 4 c++ memory callstack memory-management

如果我声明一个这样的矢量:

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

你怎么能真正"添加"元素到名称向量?如果名称是堆栈分配的,那么堆栈上的"something_else_on_the_stack"不应该在它之后吗?那么如何为已经分配的向量添加名称?

MvG*_*MvG 8

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


Hen*_*rik 7

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