嵌入式内存管理的知识点总结_第1页
嵌入式内存管理的知识点总结_第2页
嵌入式内存管理的知识点总结_第3页
嵌入式内存管理的知识点总结_第4页
嵌入式内存管理的知识点总结_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页嵌入式内存管理的知识点总结任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。(C语言)学习者、尤其是在学习(嵌入式)的朋友,这些知识点一定要吃透!

被欺骗的C进程

每一个C语言的程序被执行起来的时候系统为了更方便开发人员操作,会给每一个进程分配一个虚拟的内存空间,它实际上是从处理内存映射出来的。虚拟内存的起始地址结束地址都是固定的,因此虚拟内存的布局都是一样。比如有三个进程P1P2P3,他们虽然得到的物理内存是完全不一样,但是从进程的角度来看他们三个得到的内存确实一模一样的。

假设你正在使用的计算机实际物理内存只有1GB大小,而当前系统运行了三个进程,(Linux)会将PM中的某些内存映射为三个大小均为(4G)B的虚拟内存

,让每个进程都以为自己独自拥有了完整的内存空间,这样极大地方便了应用层程序的数据和代码的组织。

虚拟内存布局:

虚拟内存布局分为内核空间、栈、堆、数据段、代码段和一个不允许访问的空间(相当于一堵墙)。

一个用户进程可以访问的内存区域介于0x08048000到0xc0000000之间,这个“广袤”的区域又被分成了几个部分,分别用来存放进程的代码和数据。

下面让我们更进一步地研究虚拟内存中每一个空间所存放的是什么类型的数据。

栈内存

栈内存是用于存放环境变量、命令行参数和局部变量的。栈内存空间十分有限,默认情况下栈的大小为8M,在(嵌入式开发)的时候我们应该尽可能减少使用栈空间。栈空间的增长,从上(高地址)往下(低地址)每当有一个函数被调用的时候,栈就会从上往下分配一个段,这一段空间就是一个栈帧,该内存空间用来存放该函数的局部变量。

当一个函数退出(调用结束)的时候,栈空间会从下往上释放一个栈帧,将所有的内存归还给系统。注意:

栈空间中的内存存放的数据值是未知的,因此每一个局部变量在使用之前最好做好初始化

栈内存的空间我们无法手动实现申请与释放,都是由系统自动完成,我们无法干预。

堆空间

堆空间是相对自由的空间,这是一个非常重要的区域,因为在此区域定义的内存的

生命周期我们是可以控制的:从malloc()/calloc()/realloc()开始,到free()结束,其分配和释放完全由我们(开发者)自定义,这就给了我们最大的自由和灵活性,让程序在运行的过程当中,以最大的效益使用内存。

注意:

相对于栈空间来说,堆的内存空间相对大很多

堆空间的增长方式,从下(低地址)往上(高地址)

堆空间中的内存都属于匿名空间,因此需要借助指针来访问

有开发者自行申请和释放的,如果没有释放那么这个空间将一直存在,直到程序结束。

数据段

数据段中存放着全局变量、静态变量、和常量这些数据,生命周期与程序一致。程序不止,数据不断(段)。

代码段

代码段中又分成了两个空间:

.(te)xt段:存放用户的代码(mianfunc...)

init段:当程序运行之初的一些初始化的工作(由编译器根据系统来对应添加的)

内存管理是嵌入式学习的重点知识,也是判断一个人是否入门的重要标志。内存管理学得

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论