gpt4 book ai didi

c++ - 为什么在 C++ 中为执行线程从未遇到过的局部变量声明分配堆栈空间?

转载 作者:可可西里 更新时间:2023-11-01 18:11:06 26 4
gpt4 key购买 nike

为什么在 C++ 中为执行线程从未遇到过的局部变量声明分配堆栈空间?或者,如果 C++ 标准未定义,为什么某些编译器会为执行线程从未遇到过的局部变量声明分配堆栈空间?编译器能否只为执行线程遇到的变量声明分配堆栈空间并仍然工作?

为了说明,在无法遇到变量字符的 Debug 模式下调用此函数会导致堆栈溢出:

void f()
{
if (false)
{
char chars[INT_MAX];
}
}

最佳答案

编译器已经提升了局部变量的声明。是否完成此操作未由标准定义,因此该行为是特定于实现的。这样做允许一次为所有局部变量分配空间,从而减少开销。

但是,通过优化,编译器会将您的特定情况识别为死代码,并且您遇到的问题将被消除。

关于c++ - 为什么在 C++ 中为执行线程从未遇到过的局部变量声明分配堆栈空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127878/

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