class Test
{
void func(){int i;}
};
int main()
{
cout<<sizeof(Test)<<endl; //gives 1
}
为什么sizeof(Test)不考虑函数的大小。功能在哪里真正与它的身体存储?在Google中找不到任何链接来解释这一点。
编辑:如果除了维基之外提供了关于类内部分的任何好的链接,那将是很好的。
答案 0 :(得分:11)
如果确实考虑了函数的大小,sizeof
对于其预期目的将毫无用处。例如,您可以使用sizeof(Test)
来了解要分配多少内存来保存对象的实例。
但该实例并不包含该函数的副本,因为每个实例的函数都相同。如果需要,只需存储一个功能的副本就不会受到存在的对象数量的影响。
答案 1 :(得分:2)
sizeof
返回此类型对象的大小。
一个对象由两部分组成:第一个是数据,第二个是类型信息(类)。第一部分仅包含数据(可能还包含某些类型信息),您可以将其视为实际对象。类部分是单独存储的(从可执行文件加载,每个类一次,因此可能在很多对象上共享)。函数(和更多)存储在类部分中。
答案 2 :(得分:2)
函数体是代码。代码存储在程序内存的代码段中。它不会增加类对象的大小,因此您最终会得到示例中空类实例的最小大小,即1。
请注意,sizeof
运算符计算所传递类型的对象表示的大小(以字节为单位)。
供参考: