????1??gcc??????????????????
#pragma pack() ??????????????
#pragma pack(n) (n=1/2/4/8)????n??????
#pragma pack(2)
struct mystruct1
{
int a;
char b;
short c;
}
struct mystruct2
{
int a;;
double b;
short c;
}
#pragma pack()
???????????????????2?????????
??????????
????(1)#pragma????????????????????????????????????????????????????????4????????????????????????4??????????????????1????????????????8?????????????128????????
????(2)??????????????????????????????2??????????#pragma pack()?????????????????1????????Щ????????????????????????????????Щ??????????????????????????????#pragma pack(4)??????????е????????????????????????
????(3)???????#prgama pack(n)???????#pragma pack()??β???????????????????????????????n??
????(4)#prgma pack????????C??????????????????gcc???????????????????á?
????2??gcc????????
????__attribute__((packed))??????????????????1??????
????__attribute__((aligned(n)))???趨???????????尷n?????????????????????????????????????n??????
????struct mystruct1
????{
????int a;
????char b;
????short c;
????}__attribute__((packed));
????????????????????1??????????????????????7???
????123456 struct mystruct2
????{
????int a;
????char b;
????short c;
????}__attribute__((aligned(2))) mystr2;
????(??????mystr2 __attribute__((aligned(2))) )
????????mystruct2????????????2??????
????(1)__attribute__((packed))????????????????????????????????棬?????????????Χ??м??????????????????????packed???????????????????
????(2)__attribute__((aligned(n)))????????????????????????????????棬?????????????Χ??м????????????????????????????????????棬?????????????棩????????????????????????????????n?????????????????????n???????????????????????n??????
??????????????
????????sizeof???????????????????????????????????????????????????????????????漰????????????????????????????????κα???????????????κε?????????????????????????????????????????????????????????????????????????????????????????????У????????????????У???????????
??????????????
????1)?Щ?????????????????????????????????
????2)???????????????????е?????ζ?????????????????????????int????????????????????????????????????????????????????????????????????????????2??????????????????
??????C99????У?????????????????????????????????????????????????????????????????????£?????????????в??????????????????????μ?????????????????????????????
????1)???????????????????????????(offset)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ó????????????????????????????????????
????2)???????????????С??????????С?????????????????????????????β???????????????????С??????????С??????????
???????????????????????????????????????????????????????????????ж????????????????????????????????2?????????о??????????????????????????????????????????
???????????????????windows(32)/VC6.0??????????????????????????????????????????????С??????linux(32)/GCC??double????????????????????4???????linux(32)/GCC?????????????????????г???CPU???????????????????????????????????????????????????????????CPU??????????????????CPU???????32λ????CPU?????4??????linux(32)/GCC??double????????????????????4?????????Linux(64)?£???double?????????????????8??
??????????????????????????????????????????????????????????????#pragma pack(n)???????????????????趨?????????趨?????????????????windows(32)/VC6.0?£?n?????????1??2??4??8???????????8????linux(32)/GCC?£?n????????1??2??4???????????4???????DEV-CPP??MinGW????windows??n??????VC???????
???????????2????????????????????2??????????????????????????????????????????????????????????????????????仰?е????????????????????????????????????????#pragma pack(n)?н?С????????????????????????????A???б???int a??a?????????????4???????windows/vc??????VC???????????8?????С????????a????????????A?????????????????????4???????
??????????????????????????????С????????????????????仰?е????????е??????????????????б????????????????????????????#pragma pack(n)??????С?????????????????????????????A?????????????????int a;double b;???????a?????????????????4????#pragma pack(n)?????8????a?????????4??b?????????????8????#pragma pack(n)???????8????b?????????8??????a???????????4??b???????????8???????????????8?????????8??#pragma pack(n)?????????С?????????????????8??????ζ?????????С???????8??????
??????????????????
?????????????????????????windows(32)/VC?2?????????????????8
/*????sizeof?????  2011.10.1*/
#include <iostream>
using namespace std;
//#pragma pack(4)    //????4??????
//#pragma pack()     //???4??????
typedef struct node1
{
int a;
char b;
short c;
}S1;
typedef struct node2
{
char a;
int b;
short c;
}S2;
typedef struct node3
{
int a;
short b;
static int c;
}S3;
typedef struct node4
{
bool a;
S1 s1;
short b;
}S4;
typedef struct node5
{
bool a;
S1 s1;
double b;
int c;
}S5;
int main(int argc?? char *argv[])
{
cout<<sizeof(char)<<" "<<sizeof(short)<<" "<<sizeof(int)<<" "<<sizeof(float)<<" "<<sizeof(double)<<endl;
S1 s1;
S2 s2;
S3 s3;
S4 s4;
S5 s5;
cout<<sizeof(s1)<<" "<<sizeof(s2)<<" "<<sizeof(s3)<<" "<<sizeof(s4)<<" "<<sizeof(s5)<<endl;
return 0;
}