栈机制

近些天开始看些操作系统的书,对内存管理这一块重新熟悉了下,在嵌入式操作系统中,内存布局有些不同。

1.运行时内存布局

一个程序要运行,就要先将可执行程序文件装载到计算机的内存中。装载是操作系统掌控的。一般而言,操作系统将程序装入内存后,将形成一个随时可以运行的进程空间,该进程空间分四个区域:

                                   进程空间

                代码区    ----> | code area

                全局数据区----> | data area

                堆区      ----> | heap area

                栈区      ----> | Stack area

一个运行的程序在内存中表示为这四个空间区域

其中代码区:存放程序的执行代码。所谓执行代码就是索引了一个个函数块代码,它由函数定义块的编译得到。

全局数据区:存放全局数据、常量、文字量、静态全局量和静态局部量。

堆区:存放动态内存,供程序随随机申请使用。

栈区:存放函数数据区(即局部数据区),它动态反映了程序运行中的函数状态,其运行轨迹正好用来观察函数的调用与返回,从而研究其函数机制。

栈---

栈是一种数据结构

C++在函数调用的过程,需要初始化和善后处理的环节。函数调用的整个过程就是栈空间操作过程。具体过程:

1)建立北调函数的栈空间,栈空间的大小由函数定义体中的数据量多少来决定;

2)保护调用函数的运行状态和返回地址;

3)传递参数;

4)将控制权转交给被调函数;

5)函数运行完成后,复制返回值到函数数据块底部;

6)恢复调用函数的运行状态;

7)返回调用函数。

调用一个函数,可以看作是一个栈中元素的压栈和退栈操作。

原文地址:https://www.cnblogs.com/beili/p/9272736.html