打印

无操作系统编译的.data.bss段一些问题

[复制链接]
2144|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzjgod|  楼主 | 2012-12-18 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
M3的核,无操作系统,gcc编译器,eclipse开发环境
编译出来的变量占据.data段和.bss段,其中在.bss段中,全局变量看map文件都有绝对地址的分配空间,static声明的变量在.bss中只是显示出变量占据的空间大小,感觉其实是没有分配空间的,这个在裸机的情况下是怎么个处理方式,有大神了解吗,我有的时候声明static和不声明,运行效果变了,根本不是我想要的那种情况,这些有什么要注意的吗?
不吝赐教!!

比如:
.bss           0x20000150       0xcc ./LWIPInclude_DL/lib/etharp.o
.bss           0x2000021c        0x4 ./LWIPInclude_DL/lib/icmp.o
.bss           0x20000220       0x10 ./LWIPInclude_DL/lib/inet.o
.bss           0x20000230        0x0 ./LWIPInclude_DL/lib/inet_chksum.o

表明了有变量占用的空间,但是这个空间怎么分配的?
再像:

.bss           0x200078f8       0x28 ./main.o
                0x200078f8                clientCon标志寄存器2
                0x200078f9                serverCon标志寄存器2
                0x200078fa                clientCon标志寄存器1
                0x200078fb                serverCon标志寄存器1

这些就把空间给分配好了,不是很明了啊

相关帖子

沙发
xinzha| | 2012-12-18 15:07 | 只看该作者
这个已经分配空间了啊。你算一下正好是按照每个文件里面的bss大小加上去的。

使用特权

评论回复
板凳
yzjgod|  楼主 | 2012-12-18 15:15 | 只看该作者
xinzha 发表于 2012-12-18 15:07
这个已经分配空间了啊。你算一下正好是按照每个文件里面的bss大小加上去的。 ...

空间是分配了,但是我看编译出的汇编程序,感觉没有使用这段空间,可能是我汇编没看明白,我理解就是这段分配没有使用,只用了r0-rn这些寄存器

使用特权

评论回复
地板
阿南| | 2012-12-18 15:31 | 只看该作者
恩,努力分析下汇编代码是必要的。

使用特权

评论回复
5
xinzha| | 2012-12-18 15:33 | 只看该作者
如果不是被优化掉了就肯定会用到的,只是反汇编出来可能是直接去某个hardcode的地址取内容,而不是操作全局变量(实际上操作全局变量也是对地址操作)。为什么会这样呢,可能是因为static是允许重名的,所以不会有全局的名字给它,你看反汇编就没有那么直观。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

370

帖子

2

粉丝