zoukankan      html  css  js  c++  java
  • 链接全局变量再说BSS段的清理

    废话就不多说了,开始。。。

        再说BSS段的清算

        


        

            以前遇到一个裸机程序不能改变全局变量值的问题,最后模模糊糊处理了:手动添加了一个链接脚本,清算了BSS段。问题得以处理,就认定是BSS段清算的问题,全局变量在BSS段中。

        


        

           但是现在看这个论断下的有点不全面。根据名著上说BSS段是放未初始化或者初始化为0的全局变量(经手动证实无误),我不想着有问题了。那么把这个功绩全归于BSS段的清算仿佛有点勉强了。

        


        

           为了验证一下,重新翻出以前的裸机程序,再来看看,这次只添加一个链接脚本,不清算BSS段,结果发现程序也是正常的,这下就完全的证实了我的假设。本来功绩是“链接脚本”的。但是这位链接脚本是在u-boot中提取的没有仔细分析。

        


        每日一道理
    青春,有嬉笑声与哭泣声夹杂的年华,青春的少年是蓝天中翱翔的幼鹰,虽然没有完全长大,有些稚气,有些懵懂,脱不开父母的双手却极力想去找寻属于自己的一片天空,为的是一时的激情,为的是一种独自翱翔的感觉!

        

           现在退回到没有处理这个问题之前,经过《 实例说明C语言中初始化和未初始化的全局变量地点不同的段》这个文章,肯定初始化为0的全局变量是存在BSS段的,想到查看一下用objdump生成的dis文件,看到下图所示:

        

      链接和全局变量

        


        

          全局变量g_val的链接地址是0x8080(32.125k)超出了CPU内部的内存大小(4k)。再看一下加上链接脚本的g_val的链接地址:

        

    链接和全局变量

        


        

          可以看到链接地址是小于4k的。所以能够改动了。

    文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
    “如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
    “如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
      最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

  • 相关阅读:
    第十三周总结
    第一阶段意见评论
    第十二周总结
    关于transform的3D变形函数
    12.9学习内容
    12.8学习的内容
    这是自己的第一篇博客
    食物链
    poj1988Cute Stacking
    银河英雄传说
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3084507.html
Copyright © 2011-2022 走看看