| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 616 人关注过本帖, 1 人收藏
标题:[讨论]关于结构体字节对齐问题,高手们进来探讨一下
取消只看楼主 加入收藏
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:1 
[讨论]关于结构体字节对齐问题,高手们进来探讨一下
struct test
{ int m1;char m2;float m3;
union uu{char u[5];int u2[2];}ua;
}myaa;

运行sizeof(struct test),在TC中的运行结果是12,在VC++中的运行结果是20,网上有人说VC++是4字节对齐,所以就是4+1+3(空字节)+4+8=20。

但是本人在百度百科中查了下字节对齐的内容:

 


实字节对齐的细节和具体编译器实现相关,但一般而言,满足三个准则:

 

       1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;


 
  2) 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;例如上面第二个结构体变量的地址空间。

 
  3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。例如上面第一个结构体变量。

从以上例子看,VC++明显不满足二三条件,求高手解释一下。

还有TC中为什么字节数是成员所占字节数简单相加呢,求解答,是否TC字节对齐数是1啊,或是不进行字节对齐的

2010-08-25 14:10
yuanfeng1129
Rank: 2
等 级:论坛游民
帖 子:62
专家分:31
注 册:2010-8-7
收藏
得分:0 
没一个回答得好的,还有楼上的,我想问你,20是8的倍数吗
2010-08-25 18:58
快速回复:[讨论]关于结构体字节对齐问题,高手们进来探讨一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013165 second(s), 8 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved