C++ 功能为C+的结构尺寸+;

C++ 功能为C+的结构尺寸+;,c++,sizeof,C++,Sizeof,我知道sizeof如何计算只包含数据成员的结构的大小。但例如,如果我在C中有以下结构++ struct MyAdd() { int AddInt() { int a=5; int b=5; return a+b; } int c; int d; }; p> >使用 sieOS/函数,它还会返回函数 AdvIt中声明的变量的大小,还是只考虑成员变量( c>代码>和 d>代码>? 它只考虑成员变量。 此外,非

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

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

<> p> >使用<代码> sieOS/<代码>函数,它还会返回函数<代码> AdvIt<代码>中声明的变量的大小,还是只考虑成员变量(<代码> c>代码>和<代码> d>代码>?

它只考虑成员变量。

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

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

struct MyAdd
{
  int c;
  int d;
};

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

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

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

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


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

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

为什么不尝试运行代码?
sizeof
不是函数,它是一个运算符。非虚拟成员函数通常不起作用…-没有规定说他们不捐款。@MSalters:是的。但是,您知道有哪种编译器使它们对实例大小产生影响吗?