gpt4 book ai didi

c++ - 非静态成员函数,为每个对象创建生成一份机器代码?

转载 作者:行者123 更新时间:2023-11-28 06:05:50 25 4
gpt4 key购买 nike

<分区>

在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;
}
}

我有以下问题:

  1. 如果我这样做sizeof(A) ,它只返回数据成员的大小(可能包括填充字节),然后在哪里 func2被储存了?是func2存储在与数据成员连续的一 block 内存中?如果不是,它不会惩罚缓存吗?
  2. 如果我声明std::vector<A> v(1000) , func2 会不会有1000份机器码生成?如果是,我认为与在类外声明函数(如 func1)相比,这将导致很大的内存浪费和性能劣势。 (如果我错了请纠正我)。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com