C语言那年踩过的坑--局部变量,静态变量,全局变量在内存中存放的位置
先看几个概念:
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.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构 ...
- 112.局部变量和全局变量在内存中是怎样存储的?113.WLAN无线传输协议
动态申请数据:堆 局部变量:栈 全局变量:静态区 网络传输介质:是指网络中发送方和接收方之间得到物理通路. 常见的有同轴电缆.光纤.双绞线. 无线网络协议 (Wireless Local Area N ...
- c语言指针访问 静态变量_使用C中的指针访问变量的值
c语言指针访问 静态变量 As we know that a pointer is a special type of variable that is used to store the memor ...
- C/C++开发工程师面试题整理(一)——C语言关键字、预处理、静态变量全局变量、函数等
整理一些找工作问到的题型和答案,加油吧,小菜鸡.不会的很多,感谢各位面试官的提问和解释,让我获益匪浅. 一.C语言关键字 1.关键字static的作用是什么(中兴面试题2020) 答:1.static ...
- c语言中字符型常量在内存中存放的是,【2017年整理】c语言中字符型常量与变量使用注意事项.doc...
[2017年整理]c语言中字符型常量与变量使用注意事项 字符型常量与变量 (1):字符常量:一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来作为字符常量.例如'A' 'b ...
- 我踩过的坑(二)替换Oracle字段中的字符
项目演示时要求把数据中真实地名.人名全部替换掉 1.替换表中字段的指定字符 update table_name set table_name.column_name = replace(table_ ...
- c语言输出变量案例,C语言经典例题100例——C语言练习实例41解答(static静态变量的用法)...
题目:学习static定义静态变量的用法. 程序分析:无. 程序源代码: // 百宝箱工作室官方网址 http://www.baibaox.com // 百宝箱工作室业务介绍 http://www.b ...
- c语言指数部分尾数部分,C语言中 float double在内存中的存储
C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用 64bit,我们在声明一个变量float f= 2.2 ...
- 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 ...
最新文章
- HTML5新增了哪些标签
- linux下载哪个python版本-Linux安装python3.6
- linux 基于qt assistant制作软件帮助文档,基于Qt Assistant的软件帮助系统
- 什么是AES算法?(整合版)
- jq之无callback,有 alert hide
- MacOSX系统怎么开启Root账户?Mac电脑开启root权限教程
- 【shell】shell-grep -v 排除多个输出结果
- OC字符串相加,结果按照字符串形式输出
- DA14580蓝牙硬件系统总览(二)
- 日记侠:微信传说的功能升级了,你用了没有?
- 中国电信上海电信光猫路由器设置和外接路由器
- 餐饮外卖平台小程序源码_餐饮连锁店,加盟,入住
- 从虎胆龙威4(live free or die hard)说黑客攻击
- 收藏!闲鱼卖货实操,小白轻松入门
- Linux环境下,文件的压缩/解压
- 新海诚没有参与制作的作品_全能的新海诚,最初几部作品都是他一个人完成的!但是却有缺陷!...
- android模拟登陆,Android模拟登录V2EX
- 非沪籍女生约辩异地高考沦为骂战 无疾而终
- 独立说携手百度传课在人大举办投行讲座取得圆满成功!
- 51Nod 1789 跑的比谁都快