1.sizeof(A) =22
对于类A而言,
int i ;//占用4个字节
U ;//占用13个字节
void foo();//函数声明,不占用内存
typedef char*(*f)(void*);//函数声明,不占用内存
enum ;//枚举类型,占用4个字节
(虽然枚举类型需要偏移量为4的倍数,由于人为定义了内存对齐大小为2字节,所以偏移量需要为2的倍数
所以U之后需要增加1个字节,4+13+1+4=22个字节)
如果不定义#pragma pack(2),则sizeof(A)=4+13+3+4=24个字节
#pragma pack(2) class A { int i; union U { char buff[13]; int i; }u; void foo() { } typedef char* (*f)(void*); enum{red, green, blue} color; }a;
关于枚举类型为什么是4个字节的问题:
这只是定义变量类型而已,和定义一个结构体类型一样,并不会实际分配内存。
printf("%d\n",sizeof(DIRECT));则是输出变量类型为DIRECT的存储空间。
枚举类型在c语言中自动按照Int类型大小进行存储,所以可以看到sizeof(DIRECT) =4.
typedef enum{ UP, DOWN, RIGHT, LEFT }DIRECT;
http://blog.csdn.net/hackbuteer1/article/details/6902917
http://blog.csdn.net/hackbuteer1/article/details/7450250
http://blog.sina.com.cn/s/blog_5e3455e70100uib9.html