gpt4 book ai didi

c++ - std::vector 在哪里分配内存?

转载 作者:IT老高 更新时间:2023-10-28 12:52:49 25 4
gpt4 key购买 nike

考虑以下代码片段:

#include <vector>
using namespace std;

void sub(vector<int>& vec) {
vec.push_back(5);
}

int main() {
vector<int> vec(4,0);
sub(vec);
return 0;
}

假设“vec”没有剩余空间来存储“sub”函数中的5,它在哪里分配新内存?

在子函数的栈帧中?在这种情况下, 5 将在子函数的末尾被删除。但是主函数的栈帧不能增长,因为此时子函数的栈帧在栈顶。
std::vector 是否为其在堆上的元素分配内存?但是它是如何释放堆内存的呢?如果是栈上的局部 vector ,包含该 vector 的函数的栈帧最后会被删除,而不通知 vector 将被删除?

最佳答案

Does a std::vector allocate memory for its elements on the heap?

是的。或者更准确地说,它根据您在构建时传入的分配器进行分配。你没有指定一个,所以你得到了默认的分配器。默认情况下,这将是 the heap .

But how does it free that heap memory?

通过其destructor当它超出范围时。 (请注意,指向超出范围的 vector 的 指针 不会触发析构函数)。但是,如果您已将值传递给 sub,您将构建(然后破坏)一个新拷贝。然后 5 将被推回该拷贝,该拷贝将被清理,并且 main 中的 vector 将保持不变。

关于c++ - std::vector 在哪里分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com