3382|6

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

问一个关于结构体中数据对齐的问题 [复制链接]

arm9 2440,ADS下裸机调试
在调试的程序总遇到这样一个结构体,各个变量后边的注释是我打印的地址。
typedef struct {                        
    BOOL a;               // 0x33FF576C
    WORD b;               // 0x33FF5770
    UINT8 c;              // 0x33FF5774
    WORD d;               // 0x33FF5776
    ADDRESS e;            // 0x33FF5778
    BOOL f;               // 0x33FF5780
    WORD g;               // 0x33FF5782
    BOOL h;               // 0x33FF5784
    UINT8 i;              // 0x33FF5785
    UINT8 g;              // 0x33FF5786
    UINT8 k;              // 0x33FF5787
} P;

sizeof(P)=28


对数据对齐有一点了解,明白为什么这个结构体的size是28字节。
想问一下:对于0x33FF5776、0x33FF5785、0x33FF5787这类不是4的倍数的地址,CPU能不能访问到?如果在程序里面访问到这些变量(也就是访问到了这一类地址了吧),会给程序带来什么样的影响?
需不需要把结构体中每一个变量的地址都强制在以0、4、8、c结尾的地址上?

最新回复

编译限定指的是加__pack?遇到结构体成员是union时怎么办?加上__pack之后,编译时提示函数参数什么"lose __pack qualifier"之类的。   详情 回复 发表于 2009-3-2 23:03
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1.不是4的倍数的地址CPU也是可以访问到的
2.这个地址不需要手动处理的
3.定义结构的时候要尽量考虑到对齐的问题,把一个字节,或两个字节的变量尽量放到一起,这样也可以减少空间占用。

 
 

回复

33

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
非4倍数地址可以访问,不过访问时最好加(BYTE*)或者(char*)强调是“字节型”。
结构体的成员随意定义,不需要特意规范在4的倍数,不过最好按16bit或者32bit凑齐。
访问结构体成员变量不会造成任何影响。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
这个问题我觉得最好还是加个编译限定,弄成以字节对齐,不然真的是产生问题,我没有遇到过,不过我看别人也是这么写。就照着写了。
网上很多人都说了这个东西的严重性。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
如果你定义的数据结构要跨平台,对齐方式非常重要。在ARM上非32位对齐的数据访问效率比32位方位差一些,其它没什么大问题。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
我现在调的这套代码是从8位单片机上移植过来的,代码量不少。现在碰到的问题就是函数到了最后一步要return时,return不回去。

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 gooogleman 的回复:
这个问题我觉得最好还是加个编译限定,弄成以字节对齐,不然真的是产生问题,我没有遇到过,不过我看别人也是这么写。就照着写了。
网上很多人都说了这个东西的严重性。

编译限定指的是加__pack?遇到结构体成员是union时怎么办?加上__pack之后,编译时提示函数参数什么"lose __pack qualifier"之类的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表