gpt4 book ai didi

c++ - 在函数范围内分配到堆栈上的数组是否总是在离开函数时被释放?

转载 作者:行者123 更新时间:2023-12-01 14:15:49 25 4
gpt4 key购买 nike

假设我有以下代码:

#include <iostream>
void f() {
int arr[10];
}

int main() {
f();
f();
}
数组 arr一旦我们离开 f() 的范围,就会被释放,即使我们会再次调用它?另外,如果我们只调用 f()有一次,我假设它在离开 f() 的范围时被释放,但如果我错了,请有人纠正我。
我也意识到这可能是与编译器相关的问题,所以我将 g++ 作为标签包含在内。谢谢。

最佳答案

从概念上讲确实如此 arr具有自动存储期限。 (例如,如果您要返回指向该数组元素的指针,则在调用者中取消引用该指针的行为将是未定义的。)
编译器是否根据 as-if 规则选择适当的优化是另一回事。
将 g++ 设置为 -O3,您可以期望您的整个程序编译为 int main(){} .如果您有任何疑问,请检查生成的程序集。
引用:https://en.cppreference.com/w/cpp/language/as_if

关于c++ - 在函数范围内分配到堆栈上的数组是否总是在离开函数时被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62680568/

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