gpt4 book ai didi

c - C中 block 作用域和函数作用域的区别

转载 作者:行者123 更新时间:2023-12-04 11:56:53 26 4
gpt4 key购买 nike

就进入和离开函数/ block 时栈上发生的情况而言,C99 中的 block 作用域和函数作用域有何区别?

最佳答案

理论上,编译器可以生成代码以在进入任何包含局部变量的 block 时分配堆栈帧。在这种情况下,根本不会有太大区别。

在实践中,大多数编译器会计算通过函数的任何路径可以使用的局部变量的最大大小,然后在入口处分配该大小的堆栈帧。函数内任何 block 中的变量只是与堆栈指针的不同偏移量。请注意,在这种情况下,两个(或更多) block 可能使用相同的地址。例如,源代码如下:

void f(int x) { 
if (x) {
long y;
}
else {
float z;
}
}

...很有可能 yz 会在同一个地址结束。

关于c - C中 block 作用域和函数作用域的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16177128/

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