我看到这样的: #pragma pack(<[push ¦ pop],[identifier]>,[n])
预编译指令,看了msdn后还是不甚明白,
应用场合
,#pragma pack()功能是局部调整结构成员内存位置对齐用的.
因为操作系统为了加快内存访问速度,缺省时总是将结构成员分配在整数对齐边界的内存位置.
#pragma pack()可以改变这一缺省行为. 除了一些Hook程序外,如果在网上应用程序之间传递结构(struct)化数据,也必须改变缺省对齐属性
pragma pack(...)
...
#pragma pack() 对 与
#pragma pack(...)
...
#pragma pop()对有什么不同之处?brvbar和identifier有什么具体的意义?
敬请不吝赐教。
#pragma pack(1)// 这里以后定义的structrue将以1字节对齐
... ...
#pragma pack() // 这里以后定义的structrue将以默认的字节对齐(一般为8字节)
以上操作没有涉及编译栈
******************************************************
#pragma pack(1)// 这里以后定义的structrue将以1字节对齐
#pragma pack(push,2)// 将当前structrue对齐值(1字节)保存到编译栈,并且这里以后定义的structrue将以2字节对齐
... ...
#pragma pack(pop) // 弹出编译栈顶的对齐值(1字节),并作为以后定义的structrue的字节对齐值
******************************************************
#pragma pack(1)// 这里以后定义的structrue将以1字节对齐
#pragma pack(push,2)// 将当前structrue对齐值(1字节)保存到编译栈,并且这里以后定义的structrue将以2字节对齐
... ...
#pragma pack(pop) // 弹出编译栈顶的对齐值(1字节),并作为以后定义的structrue的字节对齐值
identifier仅仅是对某个对齐值起一个别名,为了方便快速弹栈.