为什么sizeof运算符不计算函数的大小

时间:2014-12-10 08:38:55

标签: c++ sizeof

class Test
{
   void func(){int i;}
};

int main()
{
   cout<<sizeof(Test)<<endl; //gives 1
}

为什么sizeof(Test)不考虑函数的大小。功能在哪里真正与它的身体存储?在Google中找不到任何链接来解释这一点。

编辑:如果除了维基之外提供了关于类内部分的任何好的链接,那将是很好的。

3 个答案:

答案 0 :(得分:11)

如果确实考虑了函数的大小,sizeof对于其预期目的将毫无用处。例如,您可以使用sizeof(Test)来了解要分配多少内存来保存对象的实例。

但该实例并不包含该函数的副本,因为每个实例的函数都相同。如果需要,只需存储一个功能的副本就不会受到存在的对象数量的影响。

答案 1 :(得分:2)

sizeof返回此类型对象的大小。

一个对象由两部分组成:第一个是数据,第二个是类型信息(类)。第一部分仅包含数据(可能还包含某些类型信息),您可以将其视为实际对象。类部分是单独存储的(从可执行文件加载,每个类一次,因此可能在很多对象上共享)。函数(和更多)存储在类部分中。

答案 2 :(得分:2)

函数体是代码。代码存储在程序内存的代码段中。它不会增加类对象的大小,因此您最终会得到示例中空类实例的最小大小,即1。

请注意,sizeof运算符计算所传递类型的对象表示的大小(以字节为单位)。

供参考: