// MemAlign.cpp : Defines the entry point for the console application. // #include "stdafx.h" struct MyStruct { double dda1; char dda; int type; }; #pragma pack(push) //保存对齐状态 #pragma pack(4)//设定为4字节对齐 struct Test { char m1; double m4; int m3; }; //0,4~11,12~15....16 #pragma pack(pop)//恢复对齐状态 struct MyStruct2 { char dda; double dda1; int type; }; int memoffset(void* pa,void* pb) { return (char*)pb-(char*)pa; } int main(int argc, char* argv[]) { MyStruct obj; printf("int size:%d\n",sizeof(int));//4 printf("char size:%d\n",sizeof(char));//1 printf("double :%d\n",sizeof(double));//8 printf("MyStruct size:%d\n",sizeof(MyStruct));//4+4+8=16 { printf("obj:%x,obj->dda1 :%x,offset:%d\n",&obj,&obj.dda1, memoffset(&obj,&(obj.dda1)) );//0 printf("obj:%x,obj->dda :%x,offset:%d\n",&obj,&obj.dda,memoffset(&obj,&(obj.dda)));//8 printf("obj:%x,obj->type :%x,offset:%d\n",&obj,&obj.type,memoffset(&obj,&(obj.type)));//12 } MyStruct2 obj2; printf("MyStruct2 size:%d\n",sizeof(MyStruct2));//0,8,16......8+8+4=20?24! { printf("obj2:%x,obj2->dda :%x,offset:%d\n",&obj2,&obj2.dda,memoffset(&obj2,&(obj2.dda)));// printf("obj2:%x,obj2->dda1 :%x,offset:%d\n",&obj2,&obj2.dda1, memoffset(&obj2,&(obj2.dda1)) );// printf("obj2:%x,obj2->type :%x,offset:%d\n",&obj2,&obj2.type,memoffset(&obj2,&(obj2.type)));// } /////////////////////////// Test objtest; printf("Test size:%d\n",sizeof(Test));////0,4~11,12~15....16 { printf("objtest:%x,objtest->m1 :%x,offset:%d\n",&objtest,&objtest.m1,memoffset(&objtest,&objtest.m1));// printf("objtest:%x,objtest->m4 :%x,offset:%d\n",&objtest,&objtest.m4, memoffset(&objtest,&objtest.m4) );// printf("objtest:%x,objtest->m3 :%x,offset:%d\n",&objtest,&objtest.m3,memoffset(&objtest,&objtest.m3));// } return 0; } /* int size:4 char size:1 double :8 MyStruct size:16 obj:12ff70,obj->dda1 :12ff70,offset:0 obj:12ff70,obj->dda :12ff78,offset:8 obj:12ff70,obj->type :12ff7c,offset:12 MyStruct2 size:24 obj2:12ff58,obj2->dda :12ff58,offset:0 obj2:12ff58,obj2->dda1 :12ff60,offset:8 obj2:12ff58,obj2->type :12ff68,offset:16 Test size:16 objtest:12ff48,objtest->m1 :12ff48,offset:0 objtest:12ff48,objtest->m4 :12ff4c,offset:4 objtest:12ff48,objtest->m3 :12ff54,offset:12 Press any key to continue */