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的。所以能够改动了。

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

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3084507.html
Copyright © 2011-2022 走看看