彙編角度看指標和引用的區別

2021-08-09 14:21:38 字數 1261 閱讀 5276

一、定義上來看:

引用是變數的別名,指標是指向變數的位址。引用不可以為空但是指標可以為空,所以引用必須在定義的時候必須初始化並且初始化後不能被改變引用的物件,但是指標可以該變自己的指向。

引用必須引用有記憶體位址的量,如果是引用常量的話,必須使用常引用。(常引用的實現方法是編譯器為常量開闢乙個臨時量的記憶體空間進行引用)

對引用和指標分別用sizeof求大小的話,引用的結果是所指向對像的大小,但是指標則永遠是指標本身的大小。32位是4位元組,64位下是8位元組。

指標有多級,但是引用沒有多級的說法。

二、從彙編角度來看:

定義乙個引用和定義乙個指標沒有任何區別,都是用兩行相同的彙編指令實現的。

第一行是把變數的位址複製到暫存器,第二行是把暫存器的位址複製到指標或者引用變數上。所以從這個角度上看,引用的底層是用指標實現的,定義乙個引用變數就是開闢乙個指標大小的記憶體。

但是相對指標來說,引用更加有優勢:從兩方面來

1、使用方面:指標需要自己去解引用操作,但是在訪問引用變數的地方會自動進行解引用。

因為會自動進行解引用,所以不能通過區位址的方式獲得引用變數的位址,但是我曾經用指標偏移的方法獲得引用變數的位址。

2、函式的傳參:指標傳遞位址的實質還是傳遞指標的拷貝,改變的還是指標拷貝的值,要改變指標本身的值需要多級指標。但是引用傳遞實質上傳遞的實參本身,改變引用就是改變實參本身。所以引用在函式引數傳遞的方面上比指標傳遞更加有效率,不需要拷貝操作。

從彙編角度看引用

引用型別到底是什麼?它和指標有什麼關係?它本身占用記憶體空間嗎?帶著這些疑問,我們來進行分析。先看 include include using namespace std void main 通過彙編檢視 如下 9 int x 1 00401048 mov dword ptr ebp 4 1 10 ...

從彙編的角度看C 裡的引用和指標

c 裡有引用和指標,使用過c 的應該都知道它們的異同點。本文將從彙編的角度去觀察這2者的本質。使用也非常簡單,在左側編寫c 在右側就會直接顯示對應的組合語言,也可以根據需要的平台來選擇對應的編譯器 我們使用的c 如下,比較簡單 int main void 選擇的編譯器是x86 64 gcc 9.2,...

從彙編看C 中的指標和引用

以前寫c 的時候,我認為指標是就是乙個存著另乙個變數位址的變數,他是有儲存空間的,而引用只是乙個變數的別名,不會占用儲存空間。最近在搞彙編,發現下面兩段 的生成的彙編 是一樣的 指標 void func 引用 void func 上面兩段 的生成的彙編都是 004019d0 push ebp 004...