内存由哪五个部分组成,内存结构是由哪几个部分组成的

首页 > 体育 > 作者:YD1662023-06-23 21:17:52

最近花了点时间读了《深入理解C指针》这本书,读完这本书后,对于之前嵌入式C语言开发中很多一知半解的地方豁然开朗。对于之前学习以及工作中,很多没有注意的问题,也有了更加深刻的理解和认识。今天就花点时间整理下这段时间读完这本书后的所学所得,也方便后续查看。

我们在开发C语言程序的时候,程序需要在编译器中编译后,才能在对应产品中运行。在程序运行的过程中,内存的分配一般分为以下几个部分:

对于我们平时开发的C程序,加载到处理器的内存中运行,呈现出来的结构就大概分为以上五个区域。为了更好地理解,我们可以根据下面这张图去理解。

内存由哪五个部分组成,内存结构是由哪几个部分组成的(1)

下面我们简单地对上述几个区域做一下介绍。首先从代码区开始。


代码区

我们需要了解的是,我们在使用C语言开发产品程序代码的时候,最终的开发好的程序是并不能直接在产品的处理器中直接运行的。而是需要经过编译器的编译,最终将我们的代码转换成CPU处理器所能够理解的机器指令,才能在CPU中正常运行。而代码区,我们可以简单地理解为我们编写好的程序(已经转换为机器指令的程序代码)存放的地方。CPU处理器会从这个地方取出机器指令去完成对应的操作,最终实现我们想让CPU所实现的功能(简单的算术运算,或者对应的硬件操作等)。

栈区

栈区,这个区域不需要我们去维护管理,在程序运行的过程中,会自动的分配和释放。可能有些人不太能理解这个区域是做什么用的,这里我们简单地做一下介绍。

我们在开发嵌入式C程序代码的过程中,经常会在定义一些函数,去完成特定的功能(例如:定义一个addfunc函数用于实现两个数的加法运算,或者说更加复杂的,定义一个函数来对一个链表进行查询操作),在这些函数中,我们不可避免地,会去定义一些局部变量(局部变量的概念就不在这里做介绍了,不理解的建议去过一遍谭浩强的C语言程序开发)。在程序运行的过程中,我们需要一个地方去存储我们定义的这些局部变量,调用函数时的参数值,返回值等,而这个地方就是栈。

栈区是处于不断变化的状态中,举个例子,当前,程序运行在main函数中,此时栈中存储的则是main函数中我们定义的一些局部变量。这个时候,假如我们在main函数中去调用其他函数,那么,栈中会自动进行出栈操作,然后再进行入栈操作,将我们调用的那个函数的相关的局部变量,函数参数,返回值等都压入到栈中。如下图所示:

内存由哪五个部分组成,内存结构是由哪几个部分组成的(2)

最先开始,程序从main函数开始运行,在调用addfunc函数之前,栈中的存储内容可能是这样的。

内存由哪五个部分组成,内存结构是由哪几个部分组成的(3)

内存由哪五个部分组成,内存结构是由哪几个部分组成的(4)

首页 123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.