# re: C++體會 -- 內聯函數 回復 更多評論
2007-02-06 10:19 by
"內聯會增大程序的代碼",這是想當然,實際并非如此,如:
class C
{
int n_;
public :
inline int get_n() { return n_; }
};
C c;
int value = c.get_n(); // 1
如果編程器在1處調用c.get()而不是內聯它,那比內聯的代碼長度更大。想下就知道,為了調用c.get()編譯器首先要把返回地址壓棧,在函數內還要設置堆棧指針,拷貝c.n_到eax, 然后出棧,拷貝eax的值到value中,可以算下這有多少條代碼。若直接內聯不過兩條而已。
# re: C++體會 -- 內聯函數[未登錄] 回復 更多評論
2007-02-06 11:57 by
@gql
當然,內聯函數也可能減小執行代碼的尺寸。特別是,當調用函數的代碼總量大于展開的內聯函數的代碼總量。
這樣的情況會發生于非常小的函數。
inline int get_n() { return n_; }
是非常小的函數了,也是我們常用的,請你再加兩三行看看,然后調用兩次。
事無絕對,但內聯函數在編譯器編譯時大部分會增加長度,也是事實。
就像數學的拐點,在此點以下,數值很小,此點以上數值增大。
也是我沒寫清楚。