gpt4 book ai didi

c++ - 在函数顶部声明的变量和后面声明的变量之间的区别

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:20 24 4
gpt4 key购买 nike

当我在函数顶部定义变量和稍后声明变量时,生成的代码有何不同。示例:

int f(int parameter) {
int a = parameter * 2;
if (a == 4)
return 1;
int b = parameter * 4;
if (b == 4)
return 2;
return 0;
}

if (a == 4) 之后输出代码是否有b 变量初始化和分配,或者将ab 变量是否同时初始化?

最佳答案

要查看实际 发生了什么,请查看生成的汇编程序。

在分配空间方面,大多数编译器会在函数开始时为函数中使用的所有变量分配足够的堆栈空间。 (这不必像这样发生,但我不知道有哪个编译器不是这样工作的。)

在初始化方面,抽象机(由 C 和 C++ 标准定义)将初始化(即设置初始值)视为在不同时间发生。 ba 与 4 比较之后被初始化。

当然,根据 as-if 规则,如果初始化没有副作用,编译器可以在它认为合适的时候移动初始化轮次。这种情况在 C 中比在 C++ 中更常见,因为 C++ 初始化程序通常涉及其他翻译单元中的构造函数,并且编译器无法查看那里是否存在副作用。

在这种简单的情况下,如果您进行优化,ab 很可能只会存储在一个寄存器中,这很可能是相同的登记。 (这是因为您使用的是纯 int 变量,并且因为您没有重叠使用 ab。)

关于c++ - 在函数顶部声明的变量和后面声明的变量之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40464582/

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