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

2021-06-18 16:31:35 字數 809 閱讀 4595

以前寫c++的時候,我認為指標是就是乙個存著另乙個變數位址的變數,他是有儲存空間的,而引用只是乙個變數的別名,不會占用儲存空間。

最近在搞彙編,發現下面兩段**的生成的彙編**是一樣的:

指標:

void func()

引用:

void func()

上面兩段**的生成的彙編都是

004019d0  push        ebp  

004019d1 mov ebp,esp

004019d3 sub esp,8

004019d6 mov dword ptr [ebp-4],7bh

004019dd lea eax,[ebp-4]

004019e0 mov dword ptr [ebp-8],eax

004019e3 mov esp,ebp

004019e5 pop ebp

004019e6 ret

上面「ebp-4」是a,「ebp-8」實際上就是指標pa或是引用ra,所以從彙編角度看,引用實際上是占用空間的,和指標沒看出來區別。

從高階語言角度看,由於編譯器的作用,對ra取位址,即&ra,獲取的值並不是ebp-8,而是ebp-4,讓我們感覺ra就是a的別名。

注:上面的測試**及結果來自vs2005 release禁用優化。

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

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

從彙編看c 中引用與指標的使用分析

首先是引用情形下的c 原始碼 複製 如下 void add int a,int b,int c int main 下面是main對應的彙編碼 複製 如下 6 int main xor eax,eax mov esp,ebp pop ebp ret 0 下面是函式add對應的彙編碼 複製 如下 1 v...

從彙編code看C 的引用

今日在論壇上看到如下關於引用的code。我一直以為我對於引用很了解,直到膝蓋中了一箭。int val int ref int main 函式的彙編 如下 val函式返回變數i,直接把i放入eax。ref函式返回變數i的引用,把i的位址放入eax。區別和問題 int vv val int int 值傳...