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:是的。但是,您知道有哪种编译器使它们对实例大小产生影响吗?