假設一個純粹的非優化編譯器,初始化一個變量並在聲明後爲它賦值的機器代碼是否有區別?初始化一個變量並在聲明之後立即爲它賦值是否有區別?
初始化方法:
int x = 2;
分配方法:
int x;
x = 2;
我用GCC來輸出用於這兩種不同的方法生成的彙編和都導致在單個機器指令:
movl $2, 12(%esp)
該指令只是將x
變量所保存的內存設置爲值2
。 GCC可能會優化它,因爲它可以識別操作的最終結果;但我認爲這是解釋這兩個版本的唯一方法。我的推理是兩個版本都做同樣的事情:將一部分內存設置爲特定值。
爲什麼那麼往往區分術語「初始化」和「分配」之間進行,如果產生的機器代碼是一樣的嗎?
純粹是用來區分具有分配在那些具有任何價值的垃圾留在記憶(未初始化變量)的特定值的變量術語「初始化」?
可能是因爲初始化是第一次分配。 – Nikolai 2013-04-25 14:46:24
'x = 1 + 1'也會生成與'x = 2'相同的代碼。這是否意味着分配和添加也是一樣的? – 2013-04-25 20:25:27
@BoPersson「巧合不是因果關係」的好例子。 – Sebivor 2013-04-26 05:27:48