在C++中,如果我這樣定義如下非靜態成員函數,爲每個對象創建生成的機器代碼的一個副本?
int func1(int a, int b){
int res;
// do some stuff for a, b, res;
return res;
}
我知道只會有一個機器代碼副本由編譯器生成func1
如果沒有內聯(糾正我,如果我錯了)的功能,在程序執行期間,每次調用func1
都會調用機器代碼的副本。然而,對於在類的成員函數,如下面
class A{
private:
// some data members and member functions
public: // or alternatively private:
int func2(int a, int b){
int res;
// do some stuff for a, b, res;
return res;
}
}
我有一些問題,如下:
- 如果我
sizeof(A)
,它只返回數據成員的大小(可能包括填充字節) ,那麼func2
存儲在哪裏?是否將func2
存儲在與數據成員連續的一段內存中?如果沒有,是不是會懲罰緩存? - 如果我聲明
std::vector<A> v(1000)
,會生成1000份機器碼func2
的生成碼?如果是的話,我認爲這會導致大量的內存浪費和性能劣勢,比如在func1
之外聲明的功能(糾正我,如果我錯了)。
另外:http://stackoverflow.com/questions/24504913/where-are-functions-of-an-object-stored-in-memory – NathanOliver