2013-08-22 15 views
7

我知道sizeof如何计算仅包含数据成员的结构的大小。但是,例如,如果我有C++在C++中具有函数的结构的大小

struct MyAdd() 
{ 
    int AddInt() 
    { 
     int a=5; 
     int b=5; 
     return a+b; 
    } 
    int c; 
    int d; 
}; 

所以下面的结构上使用sizeof功能也返回的内部函数AddInt声明的变量的大小还是会只考虑成员变量(cd)?

+0

你为什么不尝试运行代码? – nommyravian

+3

'sizeof'不是一个函数,它是一个运算符。 –

回答

18

它只会考虑成员变量。

此外,非虚拟成员函数不会影响struct的大小,因为它们不会要求任何运行时支持。

要理解为什么它是如此,可想而知,但从编译点这段代码是非常相似的伪代码:

struct MyAdd 
{ 
    int c; 
    int d; 
}; 

int MyAdd_AddInt(MyAdd* this) 
{ 
    ... 
} 
+0

非虚拟成员函数_usually_不贡献... - 没有规则说他们没有贡献。 – MSalters

+0

@ MSalters:的确如此。但是,你知道任何编译器会使它们对实例大小有贡献吗? –

2

的功能(包括函数中的变量)的代码部分都没有数作为任何数据项的大小的一部分。

如果结构具有虚拟功能,那么可能会增加结构的大小。

编译器还可以在数据元素之间添加填充以支持数据结构中成员的正确对齐。

换句话说,sizeof可能会产生比单个元素更大的尺寸。但是任何成员函数都不会被计入这个大小。

2

sizeof将计算该类型实例的占用内存大小。对于结构/类实例,函数不会为每个实例占用额外的内存(存储在文本段中),而每个实例的数据成员将不同并且需要独立的内存(存储在rw数据段中)。