字节对齐!

想问一下各位大虾,字节对齐到底是个什么意思? 它是系统自己去对齐,还是需要人为的,在写程序时去对齐了?
如果是人为的去写对齐,该怎么写了?
谢谢!
...全文
79 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
slowgrace 2009-10-21
  • 打赏
  • 举报
回复
应该是系统自己去对齐。

写程序时,有时你需要根据系统对齐的规则正确计算变量的字节大小,计算错了会导致错误的运行结果甚至程序崩溃。

awperpvip 2009-10-21
  • 打赏
  • 举报
回复
#pragma pack(1) // 按照1字节方式进行对齐
struct TCPHEADER
{
short SrcPort; // 16位源端口号
short DstPort; // 16位目的端口号
int SerialNo; // 32位序列号
int AckNo; // 32位确认号
unsigned char HaderLen : 4; // 4位首部长度
unsigned char Reserved1 : 4; // 保留6位中的4位
unsigned char Reserved2 : 2; // 保留6位中的2位
unsigned char URG : 1;
unsigned char ACK : 1;
unsigned char PSH : 1;
unsigned char RST : 1;
unsigned char SYN : 1;
unsigned char FIN : 1;
short WindowSize; // 16位窗口大小
short TcpChkSum; // 16位TCP检验和
short UrgentPointer; // 16位紧急指针
};
#pragma pack() // 取消1字节对齐方式

xylicon 2009-10-21
  • 打赏
  • 举报
回复
用pack 和 pop,例如:
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐
struct test
{
 char m1;
 double m4;
 int m3;
};
#pragma pack(pop)//恢复对齐状态
昵称很不好取 2009-10-21
  • 打赏
  • 举报
回复
是系统去对齐,如果要设置对齐可以用#pragma pack(n),n为你想对齐的数字

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧