2013-08-16 71 views
0

時如果我寫這樣操作:存儲定義變量

int a=32; 

我是否正確理解,該整數字面正存儲象碼某處INT號碼,然後,這個常數被分配我的變量a?

+1

編譯器在編譯過程中創建一個文字「32」,最終將被移至「a」指定的地址。 –

+1

除了a將根據需要初始化爲值32之外,您無法做出任何假設。 –

+0

是的!編譯器通常會這樣做。 –

回答

0

不一定。 int a其實就是「保持在棧上sizeof(int)字節可用,我們姑且稱之爲a這樣的速度,並與32號填補它

=,這裏是不是賦值(a之前不存在的:它是這樣產生),但是是一個初始化程序

並且數字32的位置取決於底層的處理器和相關的指令,它甚至可以進入代碼本身,其指令如LD (DS+a), 32,其中DS是數據段指針, a變量的偏移量爲a,32位只是32位二進制中的位表示。

0

CPU指令通常具有保存文字值的形式;在這種情況下,由a = 32生成的存儲指令包含要存儲的值;在其他情況下,該值存儲在程序數據的某處並從那裏複製到變量中。回到過去的FORTRAN時代,你可以將一個常量傳遞給一個修改它的函數,並且從那時起該常量具有新的值。這不是一件好事。