我是 C++ 新手,我在我的项目中使用矢量类。我发现它非常有用,因为我可以拥有一个在必要时自动重新分配的数组(即,如果我想 push_back 一个项目并且向量已经达到它的最大容量,它会重新分配自己,向操作系统请求更多内存空间),所以访问向量的元素非常快(它不像列表,要到达“第 n 个”元素,我必须通过“n”个第一个元素)。
我发现这个问题非常有用,因为他们的答案完美地解释了当我想将向量存储在堆/堆栈上时“内存分配器”的工作原理:
[1] vector<Type> vect;
[2] vector<Type> *vect = new vector<Type>;
[3] vector<Type*> vect;
然而,一个疑问困扰了我一段时间,我找不到答案:每当我构建一个向量并开始推入很多项目时,它会到达向量将满的时刻,所以继续增长它需要重新分配,将自身复制到一个新位置,然后继续 push_back 项目(显然,这种重新分配隐藏在类的实现中,所以它对我来说是完全透明的)
好吧,如果我在堆 [2] 上创建了向量,我可以毫不费力地想象可能发生的事情:类向量调用 malloc,获取新空间,然后将自身复制到新内存中,最后删除调用 free 的旧内存。
然而,当我在堆栈上构造一个向量时,面纱隐藏了正在发生的事情[1]:当向量必须重新分配时会发生什么?AFAIK,每当在 C/C++ 上输入一个新函数时,计算机都会查看变量的声明,然后扩展堆栈以获得放置这些变量所需的空间,但是当功能已经在运行。类向量如何解决这个问题?