免费注册 查看新帖 |

Chinaunix

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

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

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

论坛徽章:
0
2 [报告]
发表于 2010-07-16 09:01 |只看该作者
为了字节对齐

论坛徽章:
0
3 [报告]
发表于 2010-07-16 09:05 |只看该作者
为了字节对齐
yikaikai 发表于 2010-07-16 09:01



    这个我了解了,不过不明白空间哪些具体的场合会用到这种用法

论坛徽章:
0
4 [报告]
发表于 2010-07-16 09:22 |只看该作者
协议包,如下
103 struct usb_ctrlrequest {
104       __u8 bRequestType;
105       __u8 bRequest;
106       __le16 wValue;
107       __le16 wIndex;
108      __le16 wLength;
109 } __attribute__ ((packed));

论坛徽章:
0
5 [报告]
发表于 2010-07-16 10:02 |只看该作者
协议包,如下
klanet 发表于 2010-07-16 09:22



    谢谢,虽然没有找到你所提到的代码,但是内核中确实有看到挺多的应用的,
    但是不太明白内核中这样做的原因是为了节省空间呢还是什么原因

论坛徽章:
0
6 [报告]
发表于 2010-07-16 10:14 |只看该作者
GNU扩展,对齐用的。

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

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

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

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



    太有道理了,谢谢了

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


代码是usb驱动的源代码,include/linux/usb_ch9.h中。代码版本是2.6.10。
原因8L解释的很清楚。其实如果做过网络协议的人会对对齐,大小端理解的更深刻。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP