您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]字节对齐的疑问
本帖共有489个阅读者
发表帖子 发表投票 回复主题
[求助]字节对齐的疑问
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]字节对齐的疑问
最近到调程序,调到最后发现是定义的一个结构体变量,分配的地址是奇地址来的...
程序如下:
typedef struct _CHECK_CLEAR_STATUS_RESPONSE
{
    char    status;
    char    bmClear;
}CHECK_CLEAR_STATUS_RESPONSE, *pCHECK_CLEAR_STATUS_RESPONSE;

typedef struct _INITIATE_CLEAR_RESPONSE
{
    char    status;
}INITIATE_CLEAR_RESPONSE, *pINITIATE_CLEAR_RESPONSE;

INITIATE_CLEAR_RESPONSE                 InitiateClearRes;
CHECK_CLEAR_STATUS_RESPONSE             ClearStatusRes;

int main( void )
{
    /* Begin adding your custom code here */
    return 0;
}
编译下载后,用全局变量观察窗口看到如下结果:ClearStatusRes分配的地址刚好对在奇地址上!
请问下这是为什么呢?工程是默认建立的,没有开优化什么的。

上传的图片
  20138221137756.jpg [ 11.87 KB 421×117 ] (缩略时请点击查看原图)

 


程序:
上传的附件
   201382211392456.zip [ 16.22 KB ]


这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/8/22 11:40:10
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
因为你的结构体InitiateClearRes是一个byte,分配的是偶地址,你的
ClearStatusRes 与其相邻,分配的就是奇地址

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/8/22 21:21:05
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
谢谢andy,那这样说的话!当定义多个结构体和变量时,还要时不时的看它们是不是奇数个字节了(有没有什么办法让编译器自动分配到偶地址上)?我把INITIATE_CLEAR_RESPONSE结构体变大(增加字节,但保持奇数),这样分配的一直是奇地址的!

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/8/23 8:26:20
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
没有那么用过,不知,都是用默认地址

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/8/24 0:01:29
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159322 Call, 1 Queries, Processed in 0.031006 second(s),