定义了一个类MyClass,类中有成员变量
int a;
float b;
static int c;
还有成员函数:
int fun1()
float fun2()
static int fun3()
……
我想知道这些普通的成员函数、变量,还有静态成员函数、变量,他们在内存中是怎么存储的~~
如果我定义该类的指针, MyClass *myClass;
那么myClass指向 的是什么???
另外,如果我定义一个结构体
typedef struct
{
int a;
float b;
int fun1();
}MyStruct;
那么, MyStruct myStruct;又是怎么存储的?定义a,b时,交换顺序,会有影响吗?
简单点,非静态成员变量占用空间,成员函数(无论是否是静态的)则不占用空间:
class MyClass{
int a; //占用4字节
float b; //占用4字节
static int c;//在全局数据区,所有对象共享,不计入各对象中
int fun1(); //不占用对象的空间
float fun2();//不占用对象的空间
static int fun3();//不占用对象的空间
};
MyClass类的实例中:
占用2*4=8个字节 (即a b这两个成员)
涉及虚函数表那些你在另外研究。
c++中struct和class在计算对象大小时你就不用区别了,计算方法一样。
为什么以上的结果都是12呢,为什么不是9,
不是说结构体结果不一样吗,为什么都相同?
例子举得不恰当,应该这样子
typedef struct
{
char b;
int a;
char c;
}MyStruct1;
和
typedef struct
{
int a;
char b;
char c;
}MyStruct2;
sizeof(MyStruct1) = 12 , sizeof(MyStruct2) = 8
32位系统一般是4字节对齐,不满4个字节会自动补足。