免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11117 | 回复: 14
打印 上一主题 下一主题

__attribute__((packed))一般在什么时候才会用到哦? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-16 08:52 |只看该作者 |正序浏览
有人说,网络数据交换,一般都需要__attribute__((packed)),有什么具体一些的例子否?

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
15 [报告]
发表于 2012-06-13 16:16 |只看该作者
本帖最后由 yulihua49 于 2012-06-13 16:18 编辑
jssfy 发表于 2010-07-16 08:52
有人说,网络数据交换,一般都需要__attribute__((packed)),有什么具体一些的例子否?

如果在非X86的机器间传送是非常危险的,可导致程序崩溃。
最好是对结构序列化,变成XML或JSON什么的。
见:
http://bbs.chinaunix.net/thread-3752484-1-1.html

论坛徽章:
0
14 [报告]
发表于 2012-06-13 15:54 |只看该作者
感觉为了平台的兼容性还不如
#pragma pack(push)
#pragma pack(1)
struct
{
...................
}
#pragma pack(pop)

论坛徽章:
0
13 [报告]
发表于 2010-07-16 15:36 |只看该作者
如果想兼容MSVC,可以用GCC的兼容扩展
#pragma pack(push,1)
......
#pragma pack(pop)
楼主的__attribute__((packed))是GCC扩展。

论坛徽章:
0
12 [报告]
发表于 2010-07-16 15:34 |只看该作者
不懂,mark以下

论坛徽章:
0
11 [报告]
发表于 2010-07-16 15:15 |只看该作者
字节对齐和大小端没啥关系吧

论坛徽章:
0
10 [报告]
发表于 2010-07-16 13:30 |只看该作者
谢谢,虽然没有找到你所提到的代码,但是内核中确实有看到挺多的应用的,
    但是不太明白内核 ...
jssfy 发表于 2010-07-16 10:02


代码是usb驱动的源代码,include/linux/usb_ch9.h中。代码版本是2.6.10。
原因8L解释的很清楚。其实如果做过网络协议的人会对对齐,大小端理解的更深刻。

论坛徽章:
0
9 [报告]
发表于 2010-07-16 11:01 |只看该作者
跨平台通信时用到。不同平台内存对齐方式不同。
如果使用结构体进行平台间的通信,会有问题。
例如,发送 ...
ka-bar 发表于 2010-07-16 10:41



    太有道理了,谢谢了

论坛徽章:
0
8 [报告]
发表于 2010-07-16 10:41 |只看该作者
跨平台通信时用到。不同平台内存对齐方式不同。
如果使用结构体进行平台间的通信,会有问题。
例如,发送消息的平台上,结构体为24字节,接受消息的平台上,此结构体为32字节(只是随便举个例子),那么每个变量对应的值就不对了。
我曾经写过一个帖子,水平有限,但还算是详细:
http://bbs.kylin-linux.com/htm_data/10/1005/339.html

论坛徽章:
0
7 [报告]
发表于 2010-07-16 10:14 |只看该作者
想想struct是如何对齐的

不同框架的处理器对齐方式会有不同,这个时候不指定对齐的话,会产生错误结果
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP