设为首页 加入收藏
首页 资讯 vxWorks VMEbus 硬件 开源系统 大杂烩 EBook BBS
我要投稿

TOP

分布式系统中为何要在一些结构体中增加一个filler填充字?
2011-05-14 16:10:53 来源:www.vxdev.com 作者:frank 【 】 浏览:60次 评论:0

Q:  分布式系统中为何要在一些结构体中增加一个filler填充字?
A:  在分布式系统或涉及通信的情况下,结构体往往要进行填充,使得不管编译选项如何,结构体中的成员的偏移地址为固定值。
结构体填充的问题,举例来说:
    比如结构体A
        typedef struct
        {
           int a;
           double b;
        } A;
    如果编译器是按8字节对齐的话,结构体大小为16字节,a与b之间自动会被插入4个字节的填充。即b在结构的地址为起始位置之后8个字节。但如果编译器是4个字节对齐的话,结构体大小为12字节,a和b之前没有填充,b在结构体中的位置为起始位置之后4个字节。
    这样如果两个系统中一个是按8字节对齐编译的这个结构,而另一个系统按4字节对齐编译的结构,同一个结构体中的b对应的位置就不一样了,如果要通信的话,数据包的解析就会有问题。

    而如果在a与b之间增加一个填充字filler,改成如下
        typedef struct
        {
           int a;
           int filler;
           double b;
        } A;
这样,不管编译器是4字节还是8字节对齐处理的,b在结构体中的位置都是固定为起始位置之后8字节。

您看到此篇文章时的感受是:
Tags:结构体 对齐 分布式 filler 填充 责任编辑:frank
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何在windows下获取网卡的MAC地.. 下一篇php168网站系统发表文章后自动删..

评论

帐  号: 密码: (新用户注册)
表  情:
内  容:

相关栏目

最新文章

图片主题

热门文章

推荐文章

相关文章

广告位