<分区>
在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
存储在与数据成员连续的一 block 内存中?如果不是,它不会惩罚缓存吗? - 如果我声明
std::vector<A> v(1000)
,func2
会不会有1000份机器码生成?如果是,我认为与在类外声明函数(如func1
)相比,这将导致很大的内存浪费和性能劣势。 (如果我错了请纠正我)。