struct n字节的对齐方式
2010-04-07 23:49
295 查看
struct 在VC6下默认8字节对齐方式,但2005的默认对齐方式不是这样的,所以俩边如果通信的话, 同样的结构会出现大小不一样的情况。这个时间就需要一下函数的处理
VC中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式
例如:
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐
struct test
{
char m1;
double m4;
int m3;
};
#pragma pack(pop)//恢复对齐状态
如果不加字节的默认设置和退出的状态 ,sizeof(test) = 24;
但是上面的= 16
这个问题需要注意了
VC中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式
例如:
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐
struct test
{
char m1;
double m4;
int m3;
};
#pragma pack(pop)//恢复对齐状态
如果不加字节的默认设置和退出的状态 ,sizeof(test) = 24;
但是上面的= 16
这个问题需要注意了
相关文章推荐
- (经典)struct和 union用 sizeof 看字节对齐,以及__declspec( align( # ) ) 和 #pragma pack()的使用方式
- 【每日一C之三】struct字节对齐方式
- struct和 union用 sizeof 看字节对齐,以及__declspec( align( # ) ) 和 #pragma pack()的使用方式
- struct 字节对齐问题(不包含struct嵌套的讨论以及修改机器的对齐方式的时候),更详细的请参考收藏
- struct(结构体)的长度以及字节对齐方式
- Struct 和 Union区别 以及 对内存对齐方式的说明
- 字节对齐和C/C++函数调用方式学习总结
- struct 字节对齐详解
- [转贴]c/c++ struct union 对齐方式
- 字节对齐方式
- sizeof(struct)对齐方式
- struct 字节对齐详解
- 通过#pragma pack(n)改变C编译器的字节对齐方式-及相应的面试题
- struct/class等内存字节对齐问题详解
- 通过#pragma pack(n)改变C编译器的字节对齐方式
- 关于arm处理器 内存编址模式 与 字节对齐方式 (转)
- 结构体(struct)的使用、内存分布以及字节对齐测试总结
- 字节对齐方式引起的血案
- struct 中字节对齐问题 (转)
- 字节对齐和C/C++函数调用方式学习总结 - [C/C++]