在函数顶部声明的变量与稍后声明的变量之间的差异
Difference between variable declared at the top of a function and one declared later
在函数顶部定义变量和稍后声明变量时,生成的代码有什么不同?例子:
int f(int parameter) {
int a = parameter * 2;
if (a == 4)
return 1;
int b = parameter * 4;
if (b == 4)
return 2;
return 0;
}
输出代码是b
变量初始化分配在if (a == 4)
之后还是a
和b
变量同时初始化
要查看实际发生了什么,请查看生成的汇编程序。
在分配空间方面,大多数编译器会在函数开始时在堆栈上为函数中使用的所有变量分配足够的空间。(这不是有这样发生,但我不知道任何编译器不这样工作。)
在初始化方面,抽象机器(由C和c++标准定义)将初始化(即设置初始值)视为在不同时间发生。b
在a
与4比较后初始化。
在这个简单的例子中,如果您进行优化,很可能a
和b
都只存储在一个寄存器中,并且这可能是同一个寄存器。(这是因为您使用的是普通的int
变量,并且您没有重叠使用a
和b
)
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]