后記:變數是寫程式中司空見慣的東西,可是到了機器層面,一切都消失了,只剩下地址,地址,地址,所以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虛擬機來說,雖然它運行的是位元組碼,但是在執行的時候,位元組碼也得靠機器指令來實作,最底層都是地址,
更多精彩技術漫畫,盡在碼農翻身
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/223058.html
標籤:其他
