我知道如何sizeof
计算仅包含数据成员的结构的大小。但例如,如果我在 C++ 中有以下结构
struct MyAdd()
{
int AddInt()
{
int a=5;
int b=5;
return a+b;
}
int c;
int d;
};
那么在使用sizeof
函数时,它还会返回函数内部声明的变量的大小,AddInt
还是只考虑成员变量(c
和d
)?
它将只考虑成员变量。
此外,非虚拟成员函数不会影响大小,struct
因为它们不需要任何运行时支持。
要理解为什么会这样,想象一下从编译器的角度来看,这段代码与这段伪代码非常相似:
struct MyAdd
{
int c;
int d;
};
int MyAdd_AddInt(MyAdd* this)
{
...
}
sizeof 是计算该类型实例的占用内存大小。对于 struct/class 实例,函数不会为每个实例占用额外的内存(存储在文本段中),而每个实例的数据成员将不同,需要独立的内存(存储在 rw 数据段中)。
函数的代码部分(包括这些函数中的变量)从不计入任何数据项大小的一部分。
如果结构具有虚函数,则可能会增加结构的大小。
编译器还可以自由地在数据元素之间添加填充,以支持数据结构中成员的正确对齐。
换句话说,sizeof
可能会产生比单个元素更大的尺寸。但任何成员函数都不会计入该大小。