當我們在C++中定義一個變數的引用時,編譯器會把C++程式碼編譯成彙編,但彙編中並沒有引用的概念, 那在彙編層是如何來處理引用的呢?
下面我們來看個簡單的例子
圖1
圖2
從上圖可知:
(1)從圖1中可知b為變數a的引用;
(2)從圖2中可知b為指向變數a的指標;
(3)雖然圖1中C++原始碼與圖2不同,但生成的彙編程式碼是一樣的,說明從彙編層是區分不出,C++原始碼中是用的指標還是引用的。所以C++中的引用的功能最終會被編譯器用指標來實現。
下面來分析下彙編程式碼:
圖3
從上圖可知:
(2)$rbp-0xc是區域性變數a的地址;
(3)$rbp-0x8是編譯器為了完成引用b的功能,生成的一個指向變數a的指標;
(4)$rbp-0x8並不是引用b的地址,因為引用b在C++中的的語義是變數a的別名,所以b的地址是等於a的地址的。如下圖所示:
更多文章:
最新評論