11

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

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

那么在使用sizeof函数时,它还会返回函数内部声明的变量的大小,AddInt还是只考虑成员变量(cd)?

4

3 回答 3

21

它将只考虑成员变量。

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

要理解为什么会这样,想象一下从编译器的角度来看,这段代码与这段伪代码非常相似:

struct MyAdd
{
  int c;
  int d;
};

int MyAdd_AddInt(MyAdd* this)
{
   ...
}
于 2013-08-22T12:39:58.927 回答
4

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

于 2013-08-22T12:52:50.783 回答
3

函数的代码部分(包括这些函数中的变量)从不计入任何数据项大小的一部分。

如果结构具有虚函数,则可能会增加结构的大小。

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

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

于 2013-08-22T12:46:41.590 回答