標籤:typedef cal 析構 堆棧 引用 全域變數 載入 記憶體 this
函數堆棧的三個用途:
1.進入函數前儲存環境變數和返回地址;
2.進入函數時儲存實參的拷貝;
3.儲存函數體內的局部變數。
函數調用規範:定義函數實參壓棧,退棧以及堆棧釋放方式。
1._cdecl:函數預設規範,參數從右至左依次壓棧,便於可變參數函數,C++靜態成員函數和友元函數使用此規範。
2._thiscall:C++非靜態成員函數的預設規範,不能使用可變參數。當非靜態成員函數調用時,this指標直接儲存在ECX寄存器中,而不是函數堆棧。
函數串連規範:
1.通用的C串連規範:
#ifndef _cplusplus
extern "C" {
#endif
#ifndef _cplusplus
}
#endif
函數參數:
1. C包括值傳遞和地址傳遞,C++增加了引用傳遞(引用的建立和銷毀不會調用對象的建構函式和解構函式)。
2. C無參函數需要使用void,否則認為接受任何類型和個數的參數。而C++無參數函數則表示不接受任何參數。
函數傳回值:
1. C不加函數傳回值類型的函數,統一當成int處理,而C++不允許沒有傳回值類型。
2. C++傳回值為引用,如果傳回值為內部局部變數,則會導致引用無效記憶體。
3.傳回值效率,如:
1). return String(a);
臨時變數建立並初始化在外部儲存區,省去了拷貝和析構開銷。
2). String result(a);
return result;
result對象被建立,調用建構函式初始化。接著調用拷貝建構函式,把result對象複製到儲存傳回值的外部儲存區,最後在函數結束時調用解構函式銷毀result對象。
儲存類型:
全域變數和全域函數:extern
全域常量:static
局部變數: auto
register類型則載入到CPU寄存器中,減少和記憶體的互動開銷,一般為迴圈計數器。
連線類型:
1.外串連:在別的編譯單元中被調用,如全域變數和全域函數或者被extern修飾的全域常量。
2.內串連:僅在一個編譯單元被調用,如全域常量,static修飾的變數,類,匿名聯合體,typedef定義。
3.無串連:函數的局部變數或局部類。
C++/C函數