首頁>技術>

當我們在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的地址的。如下圖所示:

更多文章:

10
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python turtle畫畫,一個有趣的存在(一)