当我在函数顶部定义变量时以及稍后声明它时生成的代码有什么区别.例:
int f(int parameter) {
int a = parameter * 2;
if (a == 4)
return 1;
int b = parameter * 4;
if (b == 4)
return 2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是否有代码b
后变量初始化和分配if (a == 4)
或意志a
和b
变量在同一时刻被初始化?
要查看实际发生的情况,请查看生成的汇编程序.
在分配空间方面,大多数编译器将在函数开始时为函数中使用的所有变量分配足够的空间.(这不具有发生这样的,但我不知道是哪个不喜欢这个工作,任何编译器.)
在初始化方面,抽象机器(由C和C++标准定义)将初始化(即设置初始值)视为在不同时间发生. 与4 b
比较后初始化a
.
当然,通过as-if规则,如果初始化没有副作用,编译器可以根据需要移动初始化轮.这种情况在C语言中比在C++中更常发生,因为C++初始化程序通常涉及其他翻译单元中的构造函数,并且编译器无法查看是否存在副作用.
如果您优化这种简单的情况下,很可能既a
与b
仅会被存储在寄存器中,而这很可能是同一个寄存器.(这是因为你使用普通int
变量,因为你没有重叠使用a
和b
.)
归档时间: |
|
查看次数: |
120 次 |
最近记录: |