先看几个概念:

1、bss是英文block started by symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清0。bss段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定,用户应该将它定义在可读写的ram区内,源程序中使用malloc分配的内存就是这一块,它不是根据data大小确定,主要由程序中同时分配内存最大值所确定,不过如果超出了范围,也就是分配失败,可以等空间释放之后再分配。

2、text段是程序代码段,在at91库中是表示程序段的大小,它是由编译器在编译连接时自动计算的,当你在链接定位文件中将该符号放置在代码段后,那么该符号表示的值就是代码段大小,编译连接时,该符号所代表的值会自动代入到源程序中。

3、data包含静态初始化的数据,所以有初值的全局变量和static变量在data区。段的起始位置也是由连接定位文件所确定,大小在编译连接时自动分配,它和你的程序大小没有关系,但和程序使用到的全局变量,常量数量相关。

4、stack保存函数的局部变量和参数。是一种“后进先出”(last in first out,lifo)的数据结构,这意味着最后放到栈上的数据,将会是第一个从栈上移走的数据。对于哪些暂时存贮的信息,和不需要长时间保存的信息来说,lifo这种数据结构非常理想。在调用函数或过程后,系统通常会清除栈上保存的局部变量、函数调用信息及其它的信息。栈另外一个重要的特征是,它的地址空间“向下减少”,即当栈上保存的数据越多,栈的地址就越低。栈(stack)的顶部在可读写的ram区的最后。

5、heap保存函数内部动态分配内存,是另外一种用来保存程序信息的数据结构,更准确的说是保存程序的动态变量。堆是“先进先出”(first in first out,fifo)数据结构。它只允许在堆的一端插入数据,在另一端移走数据。堆的地址空间“向上增加”,即当堆上保存的数据越多,堆的地址就越高。

  遇到的问题:

  以前这些我都记得,今天遇到实际问题时候,发现远远不是这回事,全局变量能放在text段吗?

的确可以的,其实,我今天就遇到了这种情况,这个配置的区域实际上是可以在link文件中修改的,假如我的link文件是这样子的:

  其实,这种情况下,假如我定义个const 类型的全局变量,该全局变量就会在text段了,看来,计算的的东西,还是要理解原理才行啊.不过,这个也是反复的过程,有谁不经过磨难,就能快速成长呢?

转载于:https://www.cnblogs.com/dylancao/p/9936957.html

C语言那年踩过的坑--局部变量,静态变量,全局变量在内存中存放的位置相关推荐

  1. 局部变量,静态局部变量,全局变量,静态全局变量在内存中的存放区别(转)...

    我们先来看内存中的几大区:  内存到底分几个区? 下面有几种网上的理解,我整理一下: 一: 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构 ...

  2. 112.局部变量和全局变量在内存中是怎样存储的?113.WLAN无线传输协议

    动态申请数据:堆 局部变量:栈 全局变量:静态区 网络传输介质:是指网络中发送方和接收方之间得到物理通路. 常见的有同轴电缆.光纤.双绞线. 无线网络协议 (Wireless Local Area N ...

  3. c语言指针访问 静态变量_使用C中的指针访问变量的值

    c语言指针访问 静态变量 As we know that a pointer is a special type of variable that is used to store the memor ...

  4. C/C++开发工程师面试题整理(一)——C语言关键字、预处理、静态变量全局变量、函数等

    整理一些找工作问到的题型和答案,加油吧,小菜鸡.不会的很多,感谢各位面试官的提问和解释,让我获益匪浅. 一.C语言关键字 1.关键字static的作用是什么(中兴面试题2020) 答:1.static ...

  5. c语言中字符型常量在内存中存放的是,【2017年整理】c语言中字符型常量与变量使用注意事项.doc...

    [2017年整理]c语言中字符型常量与变量使用注意事项 字符型常量与变量 (1):字符常量:一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来作为字符常量.例如'A' 'b ...

  6. 我踩过的坑(二)替换Oracle字段中的字符

    项目演示时要求把数据中真实地名.人名全部替换掉 1.替换表中字段的指定字符 update table_name  set table_name.column_name = replace(table_ ...

  7. c语言输出变量案例,C语言经典例题100例——C语言练习实例41解答(static静态变量的用法)...

    题目:学习static定义静态变量的用法. 程序分析:无. 程序源代码: // 百宝箱工作室官方网址 http://www.baibaox.com // 百宝箱工作室业务介绍 http://www.b ...

  8. c语言指数部分尾数部分,C语言中 float double在内存中的存储

    C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用 64bit,我们在声明一个变量float f= 2.2 ...

  9. Nwafu-OJ-1430 Problem a C语言实习题五——5.用指针实现查找二维数组中最大数及其位置

    题目描述 用指针实现:找出二维数组(设3行4列)中的最大数及其位置. 输入 二维数组(设3行4列). 输出 最大数及其位置. 样例输入 1 2 5 4 6 8 7 2 0 2 4 5 样例输出 1 1 ...

最新文章

  1. HTML5新增了哪些标签
  2. linux下载哪个python版本-Linux安装python3.6
  3. linux 基于qt assistant制作软件帮助文档,基于Qt Assistant的软件帮助系统
  4. 什么是AES算法?(整合版)
  5. jq之无callback,有 alert hide
  6. MacOSX系统怎么开启Root账户?Mac电脑开启root权限教程
  7. 【shell】shell-grep -v 排除多个输出结果
  8. OC字符串相加,结果按照字符串形式输出
  9. DA14580蓝牙硬件系统总览(二)
  10. 日记侠:微信传说的功能升级了,你用了没有?
  11. 中国电信上海电信光猫路由器设置和外接路由器
  12. 餐饮外卖平台小程序源码_餐饮连锁店,加盟,入住
  13. 从虎胆龙威4(live free or die hard)说黑客攻击
  14. 收藏!闲鱼卖货实操,小白轻松入门
  15. Linux环境下,文件的压缩/解压
  16. 新海诚没有参与制作的作品_全能的新海诚,最初几部作品都是他一个人完成的!但是却有缺陷!...
  17. android模拟登陆,Android模拟登录V2EX
  18. 非沪籍女生约辩异地高考沦为骂战 无疾而终
  19. 独立说携手百度传课在人大举办投行讲座取得圆满成功!
  20. 51Nod 1789 跑的比谁都快

热门文章

  1. Request的getHeader()和getParameter()的区别
  2. each函数循环数据表示列举,列举循环的时候添加dom的方法
  3. Unix_03_文件系统介绍_2
  4. + 网页制作效果常用代码
  5. java单例模式之线程安全问题
  6. 去除vue项目中的#及其ie9兼容性
  7. html body标签
  8. iOS 点转成字符串,再字符串转换成点
  9. 在Linux中创建静态库.a和动态库.so
  10. 关闭windows垃圾服务