1 // pragma_pack.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include6 #include 7 8 using namespace std; 9 10 11 12 /*13 这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。14 15 #pragma pack (n) //C编译器将按照n个字节对齐。16 #pragma pack () //取消自定义字节对齐方式。17 18 19 #pragma pack (push,1) //把原来对齐方式设置压栈,20 //并设新的对齐方式设置为一个字节对齐21 22 #pragma pack(pop) //恢复对齐状态23 24 因此可见,加入push和pop可以使对齐恢复到原来状态,而不是编译器默认,可以说后者更优,但是很多时候两者差别不大25 26 如:27 28 #pragma pack(push) //保存对齐状态29 30 #pragma pack(4)//设定为4字节对齐31 32 相当于 #pragma pack (push,4)33 */34 35 //#pragma pack(1)36 //调整结构体的边界对齐,让其以一个字节对齐37 38 #pragma pack(push,1)39 40 41 typedef struct _A_42 {43 char a;44 double b;45 }A;46 47 //#pragma pack()48 49 #pragma pack(pop) 50 51 52 53 int main()54 {55 cout << sizeof(A) << endl;56 57 return 0;58 }
对齐时:
屏蔽代码时: