#pragma pack()的用法
#pragma pack(4)
struct Struct1 { char c;//1byte short sh;//2byte int a;//4byte float f;//4byte int *p;//4byte char *s;//4byte double d;//8byte };
假设在32位系统中,空间为1+1+2+4+4+4+4+8=28(byte)第二个1为对齐损失空间,最后一个8没有损失空间是因为对于8对齐和4对齐,取了较小的对齐。最后因为28是4的整数倍,所以不用对齐
struct Struct2 { char c; double d; int a; short sh; float f; int *p; char *s;//32 };
空间为1+3(对齐)+8+4+2+2(对齐)+4+4+4=32
class Class1 {};
空类所占空间为1,内部成员变量所占空间跟结构体一样,普通函数不占存储空间,静态函数不占存储空间,虚函数占一个指针的存储空间,用来找虚函数表,子函数重写父类虚函数不占存储空间
class Class1 { virtual void fPut() { cout << "virtual 2"; } };//4 class Class2 { private: char c; short sh; int a; public: void fOut() { cout << "hello" << endl; } };//8 class CBase2 { private: char c; short sh; int a; public: virtual void fOut() { cout << "hello" << endl; } };//12 class CDerive :public CBase { private: int n; public: virtual void fPut() { cout << "virtual 2"; } };//8
浙公网安备 33010602011771号