查看: 2980|回复: 10

[已解决] 关于MDK变量空间分配的问题(已解决)

[复制链接]

该用户从未签到

196

主题

495

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1482
最后登录
2020-12-3
发表于 2015-8-25 14:22:01 | 显示全部楼层 |阅读模式
本帖最后由 teclimber 于 2015-9-18 16:16 编辑

各位,过来讨论一下这个问题。
uint32 test=1;
int main(void)
{
        
        test ++;

        。。。//我的程序代码省略
}
上面是我的一个测试代码。加入test这个变量前,编译结果如下:
qian.png

加入test变量后,编译结果如下:
hou.png

为什么RW-DATA和ZI-Data都涨了4个字节。而且这个变量,无论我是否初始化,结果都一样。最后,类型无论是uint8,还是uint32结果都一样。MDK是不是傻了。注:我没有开启优化。
以下为我的类型定义:
typedef unsigned char                uint8;  /*  8 bits */
typedef unsigned short int        uint16; /* 16 bits */
typedef unsigned  int        uint32; /* 32 bits */



我知道答案 目前已有10人回答

评分

参与人数 1NXP金币 +3 收起 理由
小七 + 3

查看全部评分

回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-8-25 14:58:44 | 显示全部楼层
我ZI就没有涨,加之前和之后,只有RW涨了4个字节。
41.jpg

回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-8-25 15:06:20 | 显示全部楼层
对于你第二个问题,就是定义8,16,32位的变量,为什么都是增加4个字节,这个倒是好解释的。
因为存储内存是4字节对齐的,所以你会发现,就算你定义了4个8位,2个16位,1个32位,都一样,都是占用4个字节,返回来,你就算定义一个8位,也要耗掉4个字节,因为最小单位是4字节,对齐是按照4个字节对齐的。
这个是32位机的特点。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-8-25 15:07:02 | 显示全部楼层
不过我这边奇怪的是,我MDK就算不初始化我的test,我发现我的ZI值也是0.
回复 支持 反对

使用道具 举报

该用户从未签到

196

主题

495

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1482
最后登录
2020-12-3
 楼主| 发表于 2015-8-25 15:58:31 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-8-25 15:06
对于你第二个问题,就是定义8,16,32位的变量,为什么都是增加4个字节,这个倒是好解释的。
因为存储内存是 ...

刚才我看了一下map文件,就更奇怪了
定义为uint8 test;后的map
uint8.png

定义为uint32 test:后的map
uint32.png

但是,map总的输出却还是一样的。这个MDK我也是醉了。

回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16715
    最后登录
    1970-1-1
    发表于 2015-8-25 22:20:47 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-8-25 15:06
    对于你第二个问题,就是定义8,16,32位的变量,为什么都是增加4个字节,这个倒是好解释的。
    因为存储内存是 ...

    有学习了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-8-26 09:37:23 | 显示全部楼层
    teclimber 发表于 2015-8-25 15:58
    刚才我看了一下map文件,就更奇怪了
    定义为uint8 test;后的map

    你多贴一点,你看看你map 文件中下一个data的地址,就增加了4, 这个就是存储对齐导致的。
    我定义了两个8位的变量,test, test1
       .data                                    0x1ffff000   Section        2  platinum.o(.data)
        test                                     0x1ffff000   Data           1  platinum.o(.data)
        test1                                    0x1ffff001   Data           1  platinum.o(.data)
        .data                                    0x1ffff004   Section       20  sysinit.o(.data)
        .data                                    0x1ffff018   Section        4  system_mkl25z4.o(.data)
        .data                                    0x1ffff01c   Section        4  retarget.o(.data)
    你看下一个data的地址就是4了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    196

    主题

    495

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1482
    最后登录
    2020-12-3
     楼主| 发表于 2015-8-26 10:42:21 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-8-26 09:37
    你多贴一点,你看看你map 文件中下一个data的地址,就增加了4, 这个就是存储对齐导致的。
    我定义了两个8 ...

    还有一个问题,我定义的变量都没有初始化,但都被分配到了.data,而不是.bss
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    196

    主题

    495

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1482
    最后登录
    2020-12-3
     楼主| 发表于 2015-8-26 10:45:25 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-8-25 15:06
    对于你第二个问题,就是定义8,16,32位的变量,为什么都是增加4个字节,这个倒是好解释的。
    因为存储内存是 ...

    123.png

    如果只定义一个字节的数据,是只分配一个自己的空间的。只有多个变量连续分配时,才有对齐的规则。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-8-26 11:01:18 | 显示全部楼层
    teclimber 发表于 2015-8-26 10:42
    还有一个问题,我定义的变量都没有初始化,但都被分配到了.data,而不是.bss ...

    我这边也没看到被分配到.bss段,只是信息上面没有看到.bss,应该和编译器有关。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-28 11:55 , Processed in 0.107889 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表