歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux 程序運行棧幀

我們知道C語言中,每個棧幀對應著一個未運行完的函數。棧幀中保存了該函數的返回地址和局部變量。棧幀也叫過程活動記錄,是編譯器用來實現函數調用的一種數據結構。那麼在Linux下gcc編譯器棧幀是怎麼實現的呢?

首先先來看一段程序:

猜猜程序運行的結果是什麼?你會發現你的系統會立馬重啟。這是為什麼呢,這就是程序運行的堆棧在作怪!!

下邊這張圖會讓你很清楚的理解

分析:

1、首先函數在傳參的時候使用的是值傳遞,在fun1中使用的參數並不是真正的參數,而是臨時拷貝。

2、p得到參數a的地址,並且--得到call指令的下一條指令,p=fun()使得當前函數運行完成之後就,運行fun()函數。

那麼現在再來看一看如何通過不使用b變量,來改變它的值

運行結果:

就這樣講b變量的值改變

有什麼不足之處,希望大家批評指正

Copyright © Linux教程網 All Rights Reserved