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