判斷運行時環(huán)境
在UNIX系統(tǒng)中,編譯器選項-S使編譯器把每個源文件的匯編代碼寫到一個具有.s后綴的文件中
靜態(tài)變量和初始化
這里的匯編代碼分別表示進入程序的數(shù)據(jù)區(qū)以及確保變量開始于內(nèi)存的偶數(shù)地址(邊界對齊),聲明為全局類型(這里的變量名和C語言的變量名相比,多了一個_),然后為這個變量創(chuàng)建空間,并賦值。
堆棧幀
寄存器變量
雖然你聲明了很多寄存器變量,但一般只有幾個值會真正使用寄存器變量。另外一般除開整形和指針,其他類型的變量不支持寄存器存放。其他的沒有使用寄存器存放的變量就會使用地址模型簡介尋址和索引操作來確定放在一個堆棧幀中的具體位置。
a6,a7,a0,a1都有其他用途
其他詳情請看p391
判斷堆棧幀布局
傳遞函數(shù)參數(shù)時
會把函數(shù)參數(shù)一他們在參數(shù)列表中的相反次序逐個壓到堆棧中;
另外也會在這個時候把函數(shù)的返回地址壓入到堆棧中;
跳轉(zhuǎn)到函數(shù)序。
函數(shù)序
把調(diào)用函數(shù)的寄存器值壓入被調(diào)用函數(shù)的堆棧的頂部,堆棧的頂部剩余位置是局部變量。
詳情看p395
堆棧中的參數(shù)次序
d0計算過程的中間結(jié)果暫存器
函數(shù)跋
返回值
表達式的副作用:
因為d0在運算中又被用來存放中間結(jié)果值,因此一下表達式可能(看編譯器會不會
發(fā)現(xiàn)return后為空和函數(shù)原型不匹配而報錯)仍返回一個正常的a+b結(jié)果值
int erroneous(int a,int b)
{
a+b;
return ;
}
運行時效率
定義程序太大的概念:當其運行的太慢的時候
提高效率:
現(xiàn)在的編譯器在才算高效的目標代碼方面已經(jīng)做的非常好了,因此把時間花在對代碼進行一些小的修改以便使它效率跟高常常并不很合算。
提示:常用技巧有使用register變量,算法和數(shù)據(jù)結(jié)構(gòu)。優(yōu)化的目標應(yīng)該找到花費時間最多的那部分程序進行優(yōu)化,UNIX系統(tǒng)大多都具有性能評測工具。
經(jīng)驗之談: