#pragma pack(1) 取消默认对齐的意义?

爱若一生 2014-04-15 08:33:35
意义是什么? 长度少于10个字!
...全文
378 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
inurlcn 2014-04-18
  • 打赏
  • 举报
回复
引用 5 楼 neustar1 的回复:
[quote=引用 楼主 cwj649956781 的回复:] 意义是什么? 长度少于10个字!
举个例子来解释吧 struct { char ch; int flag; }A; 使用默认对齐,假设4字节对齐,显然0字节存储ch,接下来1,2,3字节是对齐字节,第四字节才是flag。 如果我要把A的内容通过网络发送给客户端,客户端是不知道我机器的对齐字节的,这样的话,虽然对方知道我的结构定义,但是会出现解析错误问题。因为我们不能假设对方也使用和自己机器一样的字节对齐方式。这个道理和大小端是一个概念。说白了,必须传输连续的字节流,中间不能夹带无意义的信息。 当然了,如果我不跨网络,或者进程传输。那是不是说这样做就没有意义了。 也不尽然,不使用字节对齐可以节省空间,但是访问速率上就降低了。[/quote] 哦,原来还有个双方约定好字节对齐方式的功能。
__cc__ 2014-04-17
  • 打赏
  • 举报
回复
引用 楼主 cwj649956781 的回复:
意义是什么? 长度少于10个字!
举个例子来解释吧 struct { char ch; int flag; }A; 使用默认对齐,假设4字节对齐,显然0字节存储ch,接下来1,2,3字节是对齐字节,第四字节才是flag。 如果我要把A的内容通过网络发送给客户端,客户端是不知道我机器的对齐字节的,这样的话,虽然对方知道我的结构定义,但是会出现解析错误问题。因为我们不能假设对方也使用和自己机器一样的字节对齐方式。这个道理和大小端是一个概念。说白了,必须传输连续的字节流,中间不能夹带无意义的信息。 当然了,如果我不跨网络,或者进程传输。那是不是说这样做就没有意义了。 也不尽然,不使用字节对齐可以节省空间,但是访问速率上就降低了。
inurlcn 2014-04-17
  • 打赏
  • 举报
回复
时间换空间,
qq120848369 2014-04-16
  • 打赏
  • 举报
回复
这玩意不能用哈,会影响所有接下来的结构,必须是#pragma pack(push, 1)
turing-complete 2014-04-15
  • 打赏
  • 举报
回复
节省了内存,降低了效率。

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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