1 #pragma pack(2) 2 class BU 3 { 4 int number; 5 union UBffer 6 { 7 char buffer[13]; 8 int number; 9 }ubuf; 10 void foo(){} 11 typedef char*(*f)(void*); 12 enum{hdd,ssd,blueray}disk; 13 }bu;
求sizeof(bu)的值
#pragma pack(2)
class BU
{
int number; // 4
union UBffer
{
char buffer[13]; // 13
int number; // 4
}ubuf; // union的大小取决于它所有的成员中,占用空间最大的一个成员的大小,并且需要内存对齐,加#pragma pack(2)是以2字节对齐,不加【因为与sizeof(int)=4对齐】,所以是16
void foo(){} //0
typedef char*(*f)(void*); //0
enum{hdd,ssd,blueray}disk; // 3对齐之后是4
}bu;
因此sizeof(bu) = 4+14 +0 +0 +4 = 22