【发布时间】:2013-04-19 12:43:07
【问题描述】:
假设一个纯粹的非优化编译器,初始化变量和声明后赋值之间机器代码有什么区别吗?
初始化方法:
int x = 2;
赋值方法:
int x;
x = 2;
我使用 GCC 输出为这两种不同方法生成的程序集,并且都生成了一条机器指令:
movl $2, 12(%esp)
这条指令只是将x变量持有的内存设置为2的值。 GCC 可能正在优化这一点,因为它可以识别操作的最终结果;但我认为这是解释这两个版本的唯一方法。我的理由是两个版本都做同样的事情:将一部分内存设置为特定值。
如果生成的机器代码相同,为什么经常在术语“initialization”和“assignment”之间进行区分?
术语“初始化”是否纯粹用于区分具有特定值的变量与那些在内存中留下垃圾值的(未初始化的)变量?
【问题讨论】:
-
可能是因为初始化是第一个赋值。
-
x = 1 + 1也会生成与x = 2相同的代码。那是不是说赋值和加法也是一样的呢? -
@BoPersson “巧合不是因果关系”的好例子。
标签: c assembly initialization variable-assignment c99