把内存管理理解好,C语言真的不难学。今天带你“攻破”内存管理

小微 科技把内存管理理解好,C语言真的不难学。今天带你“攻破”内存管理已关闭评论122字数 1403阅读模式
摘要任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,不同的区域又有不同的特性。C语言学习者、...

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

被诈骗的C过程

每一一个C语言的程序被执行起来的时候系统为了更利便开发人员操作,会给每一一个过程分配一个虚拟的内存空间,它其实是从处理内存映照出来的。虚拟内存的起始地址收场地址都是固定的,因而虚拟内存的布局都是同样。 比如有三个过程 P1 P2 P3 ,他们尽管得到的物理内存是完整不同样,然而从过程的角度来看他们三个得到的内存确切如出一辙的。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

假定你正在使用的计算机实际物理内存只有 1GB 大小,而当前系统运行了三个过程,Linux 会将 PM 中的某些内存映照为三个大小均为 4GB 的虚拟内存 ,让每一个过程都以为自己独自具有了完全的内存空间,这样极大处所 便了利用层程序的数据以及代码的组织。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

虚拟内存布局:

虚拟内存布局分为内核空间、栈、堆、数据段、代码段以及一个不允许走访的空间(至关于一堵墙)。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

一个用户过程可以走访的内存区域介于 0x0804 8000 到0xc0000000 之间,这个“广袤”的区域又被分成为了几个部份,分别用来寄存过程的代码以及数据。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

下面让咱们更进一步地钻研虚拟内存中每一一个空间所寄存的是什么类型的数据。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

栈内存

栈内存是用于寄存环境变量、命令行参数以及局部变量的。栈内存空间十分有限,默许情况下栈的大小为 8M ,在嵌入式开发的时候咱们应当尽量减少使用栈空间。栈空间的增长,从上(高地址) 往下 (低地址)每一当有一个函数被调用的时候,栈就会从上往下分配一个段,这一段空间就是一个栈帧,该内存空间用来寄存该函数的局部变量。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

当一个函数退出(调用收场)的时候,栈空间会从下往上释放一个栈帧,将所有的内存奉还给系统。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

注意:文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

  • 栈空间中的内存寄存的数据值是未知的, 因而每一一个局部变量在使用以前最佳做好初始化
  • 栈内存的空间咱们没法手动实现申请与释放,都是由系统自动完成,咱们没法干预。

堆空间

堆空间是相对于自由的空间,这是一个无比重要的区域,由于在此区域定义的内存的 生命周期咱们是可以节制的:从 malloc/calloc/realloc开始,到 free收场,其分配以及释放完整由咱们开发者自定义,这就给了咱们最大的自由以及灵便性,让程序在运行的过 程之中,以最大的效益使用内存。文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

注意:文章源自微观生活(93wg.com)微观生活-https://93wg.com/6338.html

  • 相对于于栈空间来讲,堆的内存空间相对于大不少
  • 堆空间的增长方式,从下(低地址)往上(高地址)
  • 堆空间中的内存都属于匿名空间, 因而需要借助指针来走访
  • 有开发者自行申请以及释放的,如果没有释放那么这个空间将一直存在,直到程序收场。

数据段

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

代码段

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

.text段:寄存用户的代码(mian func ...)

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

内存管理是嵌入式学习的重点知识,也是判断一个人是不是入门的重要标志。内存管理学得好,对C语言的理解又会更为深入一些。

度白嵌入式,延续分享通俗易懂的嵌入式知识。感兴致的朋友或者是嵌入式学习者可以关注交换~

以上就是微观生活(93wg.com)关于“把内存管理理解好,C语言真的不难学。今天带你“攻破”内存管理”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/6338.html