1 // pragma_pack.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <windows.h> 6 #include <iostream> 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 }
对齐时:
屏蔽代码时:
时间: 2024-10-08 10:36:25