漫畫:你們這些奇葩的程式碼!

2020-11-13 16:01:18

後記:變數是寫程式中司空見慣的東西,可是到了機器層面,一切都消失了,只剩下地址,地址,地址。所以CPU和記憶體非常疑惑,變數到底是什麼東西?

熟悉C語言的同學可能對漫畫中的組合有點疑惑,因為C語言程式碼(x+y)*z沒有出現指標,怎麼也都變成地址了 ?其實在硬體層面,都是地址,這裡展示的是一個C語言函數

int cal(int x, int y,int z){

    return (x+y)*z;

}

對於函數呼叫來說,轉化成組合以後,會對應一個個的棧幀,當前的棧幀(例如函數cal)開始地址儲存在ebp這個暫存器當中, 而函數cal的引數儲存在上一個棧幀中(也就是呼叫者的棧幀當中),所以可以用8(%ebp), 12(%ebp),16(%ebp)來參照,意思是把暫存器ebp中的地址加上8,加上12,加上16,所以,一起都是地址。

對於Java虛擬機器器來說,雖然它執行的是位元組碼,但是在執行的時候,位元組碼也得靠機器指令來實現,最底層都是地址。 

更多精彩技術漫畫,盡在碼農翻身