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

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

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

转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/17/3084507.html

链接全局变量再说BSS段的清理相关推荐

  1. 链接脚本之bss段的清空

    链接脚本 每一个链接的过程都叫链接脚本,,一般是以lds作为后缀名,链接脚本规定把输入文件放到输出文件中,主要是用于空间布局的,我们这里就是利用链接脚本来清空bss段 注:编译器有默认的链接脚本,用l ...

  2. ELF中的.data段和.bss段

    .data 段: 已初始化的全局变量和局部静态变量都保存在 .data 段. .bss 段: 未初始化的全局变量和局部静态变量默认值都为 0,本来它们也可以被放在 .data 段的,但是因为它们都是 ...

  3. c语言堆、栈、数据段、代码段、bss段的疑惑

    程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(h ...

  4. 代码段、数据段、bss段

    编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分. 代码段:代码段就是程序中的可执行部分,直观理解代码段就是函数堆积组成的. 数据段(也 ...

  5. SECTIONS bss段初始化分析

    SECTIONS bss段初始化分析 都知道bss段需要初始化,但是这是为什么呢? 通过浏览资料,都会发现,bss段是不会出现在程序下载文件(*.bin .hex)中的,因为全都是0.如果把出现在程序 ...

  6. 关于text段、data段和bss段

    根据APUE,程序分为下面的段:.text, data (initialized), bss, stack, heap. data/bss/text: text段在内存中被映射为只读,但.data和. ...

  7. text段,data段,bss段,堆和栈

    红色部分为问题部分 堆和栈的区别 一.预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等 ...

  8. 清除BSS段的一般做法

    link脚本一般包含类似语句: 1 2 3 4 5 6 7 8 9 10 11 _bss_start = .; __bss_start__ = .; .bss            :  {   *( ...

  9. BSS段 data段 text段 堆heap 和 栈stack

    BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配.     ...

最新文章

  1. 详解OpenCV卷积滤波之边缘处理与锚定输出
  2. matlab多边形扫描线填充算法代码,计算机图形学—多边形扫描与填充
  3. 【 C 】关于学习 realloc 踩过的那些坑
  4. linux sed给空文件首行插入_linux下批量修改文件后缀名以及合并多行
  5. window下建立vue.js项目
  6. python 柱状图宽度设置_Python matplotlib 柱状图实例
  7. 在计算机硬盘中没有什么,如果在打开计算机后找不到硬盘,应该怎么办?
  8. Flutter State生命周期 Flutter Widget生命周期 Flutter 应用程序生命周期
  9. UVA1584 UVALive3225 Circular Sequence【水题】
  10. 用计算机得到圣诞树,圣诞树、标签系统和计算思维
  11. linux服务器学习笔记:linux忘记密码怎么办?
  12. logrotate日志转储
  13. ADSL宽带拨号密码恢复
  14. dosbox使用教程
  15. raspberrypi
  16. 诺基亚奢华手机:高配置+8.78万元
  17. linux系统uuid 一样,linux系统product_uuid和product_serial有何区别
  18. PDPS软件虚拟仿真:Lock TCPF功能介绍与使用方法
  19. 哪里计算机考研只考一门课,计算机考研|专业课只考一门数据结构的院校有哪些...
  20. C语言 队列(循环队列和链队初始化进出队等基本操作)

热门文章

  1. restTemplate http请求报错:no suitable HttpMessageConverter found for response type and content type
  2. 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。
  3. 2021-2027年中国中空纤维膜行业市场研究及前瞻分析报告
  4. 2022-2028年中国袋式除尘用滤料行业市场全景评估及发展策略分析报告
  5. 2022-2028年中国干洗行业市场全景调研与投资前景预测报告
  6. 【springboot】入门
  7. linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.
  8. GPU版TensorFlow怎么指定让CPU运行
  9. LeetCode简单题之检查句子中的数字是否递增
  10. LeetCode简单题之在长度 2N 的数组中找出重复 N 次的元素