趣解单片机堆栈概念

合集下载

堆和栈的区别

堆和栈的区别

堆和栈的区别
堆栈的概念⼀直⽐较朦胧,今天做⼀下梳理总结
此处的堆、栈,指的是操作系统中对内存的使⽤⽅式,不同于数据结构中的堆、栈的概念

为执⾏线程留出的内存空间,都在Ram中。

可⽤来存放局部变量,引⽤变量(引⽤在栈⾥,引⽤的内容在堆⾥)。

类似于数据结构的栈,后进先出。

由操作系统分配,分配时⼤⼩就确定了,使⽤完毕⽴即回收。

访问速度快,只使⽤指针移动。

但空间⽐较⼩。


为动态分配留出的内存空间,都在Ram中。

可⽤来存放⼿动new的对象和数组。

不同于数据结构的堆(是⼀个树),内存分配的堆是以链表结构存在的。

操作系统通过调⽤语⾔的运⾏时进⾏分配,初始分配⼀个⼤⼩,在使⽤时可以动态扩展,使⽤完成后若不⼿动释放,不会⽴即释放,要等待垃圾回收时才会释放。

访问速度慢。

若需要分配⼤亮内存时推荐使⽤。

注:数据结构中的堆栈概念
栈:先进后出的数据结构。

堆:⼀棵树。

单片机的堆栈

单片机的堆栈

堆栈是一种数据结构。

一直以为堆栈是一个寄存器,惭愧!教科书定义:所谓堆栈,就是只允许在其一端进行数据插入和数据删除的线性表。

51单片机的单片机的堆栈是在内部RAM中开辟的。

这句话表明了堆栈的位置。

那么堆栈到底有什么作用?堆栈主要是为子程序调用和中断操作而设立的,因此对应有两项功能:保护断点和保护现场。

单片机的程序归根结底是个死循环,反复在执行Main函数(主程序),你可以只写一个函数Main,那么你这个函数随着功能的增多而变得异常大,而且非常不具备可读,这个时候就需要子函数(子程序)了。

主函数在调用完子函数后会返回到主函数中,这样就可以调用其它函数并且继续这个死循环。

在计算机去执行子函数或者中断服务函数,如何确保程序能够正确地返回到主函数中并且继续正确执行后面的内容?因为在执行子函数或者中断服务函数时,很有可能会破坏寄存器单元的内容,但这些寄存器单元在子函数必须要用到?这个问题看起来比较难解决了。

这个时候就要用到断点保护和现场保护了。

保护断点:在调用子程序和堆栈时,将返回地址(执行完子程序或者中断后要执行的下一个指令的的地址(PC 寄存器值)) 送入堆栈,程序返回时,这个值自动弹回PC。

这种方式是自动使用堆栈的,程序中一般无需理会。

在这个过程中,地址送入堆栈时,堆栈指针SP+2,因为51的寻址范围是64KB,再查看RAM中堆栈单元就可以发现这个时候已经变成了PC的值,在返回的时候SP-2,但是堆栈中的内容在下一次堆栈操作之前不会发生变化。

来看下面的仿真图:程序初始化将SP设置为0x07,这个时候RAM中全部被清零。

单步运行。

这个时候SP的值已经变为0x30,但是内容依旧没有改变。

运行到断点。

运行到断点PC的值没什么变化,在执行完Lcall之后,发现RAM中30单元起了变化,0013,PC也+2,而0013就是sjmp st1的地址。

以上是用Protues仿真的结果。

在用KEIL做软仿的时候发现SP会变化,但是对应的内容却没有变化,这个是不是KEIL的一个BUG呢?保护断点是比较简单的,编程者一般不用理会。

堆栈的详细介绍(还不明白真没办法了)

堆栈的详细介绍(还不明白真没办法了)

堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。

其操作方式类似于数据结构中的栈。

2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。

注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

-程序结束后有系统释放4、文字常量区—常量字符串就是放在这里的。

程序结束后由系统释放5、程序代码区—存放函数体的二进制代码。

二、例子程序这是一个前辈写的,非常详细//main.cppint a=0;全局初始化区char*p1;全局未初始化区main(){int b;栈char s[]="abc";栈char*p2;栈char*p3="123456";123456\0在常量区,p3在栈上。

static int c=0;全局(静态)初始化区p1=(char*)malloc(10);p2=(char*)malloc(20);分配得来得10和20字节的区域就在堆区,注意,P1,P2本身在栈区,因为是局部变量。

strcpy(p1,"123456");123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。

}三、堆和栈的理论知识3.1申请方式stack:由系统自动分配。

例如,声明在函数中一个局部变量int b;系统自动在栈中为b 开辟空间heap:需要程序员自己申请,并指明大小,在c中malloc函数如p1=(char*)malloc(10);在C++中用new运算符如p2=(char*)malloc(10);但是注意p1、p2本身是在栈中的。

一文解析STM32内存管理和堆栈的认知与理解

一文解析STM32内存管理和堆栈的认知与理解

一文解析STM32内存管理和堆栈的认知与理解本文主要介绍了STM32内存管理和堆栈的认知与理解,首先介绍的是内存管理的实现原理及分配、释放原理,其次介绍了stm32的存储器结构,最后阐述了堆栈的认知与理解,具体的跟随小编一起来了解一下吧。

STM32内存管理详解内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。

其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

内存管理的实现方法有很多种,他们其实最终都是要实现2 个函数:malloc 和free;malloc 函数用于内存申请,free 函数用于内存释放。

内存管理的实现原理从上图可以看出,分块式内存管理由内存池和内存管理表两部分组成。

内存池被等分为n 块,对应的内存管理表,大小也为n,内存管理表的每一个项对应内存池的一块内存。

内存管理表的项值代表的意义为:当该项值为0 的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。

比如某项值为10,那么说明包括本项对应的内存块在内,总共分配了10 个内存块给外部的某个指针。

内寸分配方向如图所示到低位地址)即首先从最末端开始找空内存。

当内存管理刚初始化的时候,内存表全部清零,表示没有任何内存块被占用。

分配原理当指针p 调用malloc 申请内存的时候,先判断p 要分配的内存块数(m),然后从第n 项开始,向下查找,直到找到m 块连续的空内存块(即对应内存管理表项为0),然后将这m 个内存管理表项的值都设置为m(标记被占用),最后,把最后的这个空内存块的地址返回指针p,完成一次分配。

注意,如果当内存不够的时候(找到最后也没找到连续的m 块空闲内存),则返回NULL 给p,表示分配失败。

释放原理。

堆和栈的理解和区别,C语言堆和栈完全攻略

堆和栈的理解和区别,C语言堆和栈完全攻略

堆和栈的理解和区别,C语言堆和栈完全攻略在计算机领域,堆栈绝对是一个不容忽视的概念,并且在编写C 语言程序的时候也会频繁用到。

但对大多数C 语言初学者来说,堆栈却是一个很模糊的概念。

“堆栈:一种数据结构,一个在程序运行时用于存放的地方”,相信这可能是很多初学者共同的认识,这也是大部分教科书对“堆栈”的解释。

很显然,用这么简单的概括来解释“堆栈”是不合适的。

要深刻认识堆和栈的概念与区别,还必须从如下两方面说起。

数据结构的堆和栈在数据结构中,栈是一种可以实现“先进后出”(或者称为“后进先出”)的存储结构。

假设给定栈S=(a0,a1,…,a n-1),则称a0为栈底,a n-1为栈顶。

进栈则按照a0,a1,…,a n-1的顺序进行进栈;而出栈的顺序则需要反过来,按照“后存放的先取,先存放的后取”的原则进行,则a n-1先退出栈,然后a n-2才能够退出,最后再退出a0。

在实际编程中,可以通过两种方式来实现:使用数组的形式来实现栈,这种栈也称为静态栈;使用链表的形式来实现栈,这种栈也称为动态栈。

相对于栈的“先进后出”特性,堆则是一种经过排序的树形数据结构,常用来实现优先队列等。

假设有一个集合K={k0,k1,…,k n-1},把它的所有元素按完全二叉树的顺序存放在一个数组中,并且满足:则称这个集合K 为最小堆(或者最大堆)。

由此可见,堆是一种特殊的完全二叉树。

其中,节点是从左到右填满的,并且最后一层的树叶都在最左边(即如果一个节点没有左儿子,那么它一定没有右儿子);每个节点的值都小于(或者都大于)其子节点的值。

内存分配中的堆和栈在C 语言中,内存分配方式不外乎有如下三种形式:1.从静态存储区域分配:它是由编译器自动分配和释放的,即内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量与static 变量。

2.在栈上分配:它同样也是由编译器自动分配和释放的,即在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元将被自动释放。

C51单片机堆栈深入剖析

C51单片机堆栈深入剖析

51单片机堆栈深入剖析用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。

Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。

应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。

本文介绍的是Cx51程序设计时堆栈的计算方法。

1.堆栈的溢出问题。

MCS51系列单片机将堆栈设置在片内RAM中,由于片内RAM资源有限,堆栈区的范围也是有限的。

堆栈区留得太大,会减少其他数据的存放空间,留得太少则很容易溢出。

所谓堆栈溢出,是指在堆栈区已经满了的时候还要进行新的压栈操作,这时只好将压栈的内容存放到非堆栈区的特殊功能寄存器(SFR)中或者堆栈外的数据区中。

特殊功能寄存器的内容影响系统的状态,数据区的内容又很容易被程序修改,这样一来,之后进行出栈操作(如子程序返回)时内容已变样,程序也就乱套了。

因此,堆栈区必须留够,宁可大一些。

要在Cx51程序设计中防止堆栈的溢出,要解决两个问题:第一,精确计算系统分配给用户的堆栈大小,假设是M;第二,精确计算用户需要堆栈的大小,假设是N。

要求M≥N,下面分别分析这两个问题。

2.计算系统分配给用户的堆栈大小Cx51程序设计中,因为动态局部变量是长驻内存中的,实际上相当于局部静态变量,即使在函数调用结束时也不释放空间(这一点不同于标准C语言)。

Cx51编译器按照用户的设置,将所有的变量存放在片内和片外的RAM中。

片内变量分配好空间后,将剩下的空间全部作为堆栈空间,这个空间是最大可能的堆栈空间。

当然,因为Cx51是一种可以访问寄存器的C语言(特殊功能寄存器),因此可在程序中访问SP,将堆栈空间设置得小一点。

不过,一般没有人这么做。

本文只是讨论放在片内RAM的变量。

我们把变量分为两种情况:①用作函数的参数和函数返回值的局部变量。

这种变量尽量在寄存器组中存放。

为了讨论方便,假设统一用寄存器组0,具体的地址为0x00~0x07。

单片机试题总结

单片机试题总结

简答题部分1、什么叫堆栈?答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"后进先出"的结构方式处理的。

实质上,堆栈就是一个按照"后进先出"原则组织的一段内存区域。

2、进位和溢出?答:两数运算的结果若没有超出字长的表示范围,则由此产生的进位是自然进位;若两数的运算结果超出了字长的表示范围(即结果不合理),则称为溢出。

4、什么是单片机的机器周期、状态周期、振荡周期和指令周期?它们之间是什么关系?答:某条指令的执行周期由若干个机器周期(简称M周期)构成,一个机器周期包含6个状态周期(又称时钟周期,简称S周期),而一个状态周期又包含两个振荡周期(P1和P2,简称P周期)。

也就是说,指令执行周期有长有短,但一个机器周期恒等于6个状态周期或12个振荡周期,即1M=6S=12P。

5、MCS-51单片机通常内部包含哪些主要逻辑功能部件?答:51单片机通常由下列部件组成:一个8位CPU、一个片内振荡器及时钟电路、内部Flash Rom程序存储器、256B的RAM、2个16位的定时/计数器、可寻址64KB片外数据存储器和64KB片外数据存储器和64KB片外程序存储器空间的控制电路、4个8位并行I/O端口及一个可编程全双工串行接口。

6、MCS-51单片机的存储器从物理结构上可划分几个空间?答:MCS-51系列单片机的存储器配置从物理结构上可分为:片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器。

从逻辑上可分为:片内外统一编址的64KB的程序存储器、片内256B的数据存储器以及片外64KB的数据存储器。

7、存储器中有几个保留特殊功能的单元用做入口地址?分别作什么作用?答:MCS-51系列单片机的存储器中有6个保留特殊功能单元,其中0000H为复位入口、0003H为外部中断0入口、000BH为T0溢出中断入口、0013H为外部中断1入口、001BH 为T1溢出中断入口、0023H为串行接口中断入口。

一文让你彻底明白“应用工程的堆与栈”

一文让你彻底明白“应用工程的堆与栈”

应用工程的堆与栈一、基本知识C语言因其高效率而成为目前嵌入式微控制器(MCU)编程中使用最多的编程语言,堆栈是C语言区别于汇编语言的最大特点,也是其高效运行的基础。

1、定义1)基本含义事实上,堆栈包括堆(heap)和栈(s tack)两个不同的概念,只是因为其二者都占用MCU的片上RAM空间并对系统内存进行分配和管理,而被习惯性放在一起说。

在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。

可以理解成堆栈是位于MCU片上RAM空间上的一个特殊存储区。

小注:✧堆:队列优先,先进先出(FIFO—first in first out)✧栈,先进后出(FILO—First-In/Last-Out)。

2)详解介绍①堆(heap)是用于动态分配内存的RAM区域,heap的空间是用户手动申请和释放的:C语言中的malloc(size),calloc(num,size)函数分配heap,释放使用free(*heap)函数;②栈(stack)用于分配函数临时变量、在函数调用或中断产生时保存内核CPU 运行时上下文(run time context—包括内核CPU通用寄存器、SP和PC寄存器、状态寄存器(如S12内核的CCR寄存器,存放内核CPU的计算状态)及函数当前的临时变量)以及函数参数传递;其占用的RAM大小与CPU架构(不同的内核CPU其位宽和CPU寄存器数量各不相同)和编译器采用的嵌入式应用程序二进制接口(Embedded Application Binary Interface)有关。

小注:✧栈(Stack)是CPU根据程序运行需求自动分配(也叫push,即压栈)和释放(也称作pop,即出栈)的,无需用户自己维护,但需要在C工程的链接文件中指定其大小。

✧压栈(push):函数调用和中断ISR运行之前,对当前运行函数运行时的上下文进行保护。

✧出栈(pop):函数返回和中断返回时恢复调用函数和中断发生前函数的运行时环境。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于单片机堆栈概念的一个有趣的解释
因为单片机有CPU、存储器、IO等等,使他(人性化一点以配合下文)看起来就像一个比较小的计算机,所以,在理解单片机的时候如果能把你之前有的那些也许仅仅是直觉上的对计算机的理解融入进来的话,可能会对你学习单片机的概念有极大的帮助,至少对于我是这样的。

我想在关于单片机的众多让你头晕脑胀、摸不着头脑甚至想撞墙的概念里面,“堆栈”可能是其中最可恶的一个,因为即使单单是从汉语的角度来理解这个词就已经让你很晕了,其实我最初也想不通这是哪位大侠的创意,不过不用担心,这里我们完全不去讨论关于这个词的问题(这个词用得其实很好“堆”和“栈”都有他们各自的意思,准确的概括了这个区域的功能,有兴趣可以Baidu一下),这里我会打一个比较有趣的比方,以此来绕过那些令你想撞墙的概念,并使你在直觉上对“堆栈”这个概念有一个深刻的理解。

你基本上应该清楚,单片机里面是有存储区和CPU的,如果你不清楚,那么我刚刚告诉你了,请记住。

现在,请你把单片中的CPU想成一个人(你完全可以把他想成是你宿舍的那个天天和你吵嘴的同学,一会你就会发现这会非常有趣),在这里就叫他C哥吧,不过这个人不同于常人,有一些特点,一会我们会慢慢说清楚,现在要告诉你的关于这个人的第一个特点
是:他的记忆能力很差。

下面,请你把存储区想象成一个一个排好的小盒子,这些盒子的作用大致可以分成两类:1、保存
写有你命令的纸条,比如你在某个盒子里面的纸条上写着:去洗我的袜子!;2、保存你的一些东西,比如你那双正在污染宿舍空气的臭袜子。

因为C哥是一个记忆力不怎么好的人,所以,这些盒子都有自己的编号,以方便他查找。

那么,现在,我们可以来说明一下单片机是如何工作的了。

首先,你要把所有的命令还有需要处理的东西放进那些小盒子,比如刚才提到的你那双待洗的袜子还有那张纸条,这时你应该发现C哥另一个特点:笨——他只会做你明确告诉他的事情,也就是说,如果你没有在纸条上写“去洗我的袜子!”,那么C 哥极有可能会无动于衷地看着你的袜子直到他被熏晕倒,当然,更可能的情况是他根本找不到你的袜子…好了,当你把要做的事情和该怎么做写到盒子里之后,下面的任务就交给C哥了。

C哥做事真的很讲原则,他会按照你给定的顺序或者——如果你没有给定的话,根据盒子上面的编号按照从小到大的顺序——一个一个地打开盒子,读取里面的命令、处理相应的事件,直到所有的事情都执行完毕,他就会休息。

请你牢记这个简单而有趣的过程,因为其实单片机就是这样工作的,当然,这里忽略了许多细节,但是这对你从直觉上理解单片机的概念以及足够了。

下面,就要开始说明堆栈这个概念了,思来想去,还是觉
得如果直接把“堆栈”这个词用到文中来,实在不符合本文的风格,考虑到其实“堆栈”也是存贮区(这一点你要记住,堆栈并不是一个像专用寄存器那样专门的一个区域,它是由你在通用RAM区指定的。

),按照本文的说法也就是一些盒子,所以,现在我们把“堆栈”改名叫“记忆盒子”,你可以感觉到,“堆栈”的作用和记忆有极大的关系,不过你也不用在这里纠结这个名字的由来,下面我会说的。

现在,请注意,我要开始解释“记忆盒子”了,也就是“堆栈”。

大致上说,“记忆盒子”的作用是当C哥执行某任务到一半的时候突然有了更紧急的是事情要执行的时候用来保存当前任务的(包括盒子的编号和盒子里面的东西)。

这么说你肯定晕了,其实,通俗一点,就是当C哥洗袜子洗到一半的时候突然接到你的命令要去打开另一个盒子(那个盒子里的纸条上可能写着“给我换尿布”)并执行里面的命令,因为C哥记忆力很差,以至于他做完那件紧急的事情后记不起要回到哪个盒子来继续执行“洗袜子”这个命令,这时候,他要把现在手头的东西保存到“记忆盒子”里,要保存的东西有:1、放着纸条和袜子的盒子的编号(注意这里其实是两项内容);2、那双袜子。

这样,当他执行完紧急任务后会去记忆盒子里,从里面找到两张纸条,和一双袜子(这个时候C哥还是没有想起来他要洗袜子,他必须要到那张写着洗袜子命令的纸条),他按照两张纸条的信息知道自己要去哪个盒子去洗袜子,并在那里继
续完成洗袜子的任务。

你可能会发现,在这一段的解释里面有一个重要的漏洞,那就是在C哥执行完紧急任务后他是如何知道储存着原来的任务信息的盒子的编号是存储在哪个“记忆盒子”里呢?别着急,下面我会解释的。

从本质来说,“记忆盒子”与普通的盒子是没有区别的,他们都是单片机里面的存储单元,证明这一点的最好证据就是堆栈是需要你来指定的,也就是说,你要预先把一些盒子指定为“记忆盒子”。

下面,说明一下是如何指定“记忆盒子”的。

其实这个过程很简单,在单片机的专用寄存器里面有一个SP 指针(81H),这个指针里面记录着堆栈的开始处的地址。

用符合本文的话来解释就是,C哥的衣服上有一个口袋(也就是SP 指针),这个口袋里面的“神奇纸条”上记录着第一个“记忆盒子”的编号,而指定“记忆盒子”的过程就是你在这张“神奇纸条”上写上一个盒子的编号(作为第一个“记忆盒子”的编号),这个纸条会自动地将纸条上的编号加1或者减1,所以,某个目前并不确定的区域内盒子具备了成为“记忆盒子”的可能,注意,堆栈的大小是不能规定的,这就是为什么用“生长”这个词来形容堆栈。

现在,关于堆栈的概念基本上都介绍完了,但是,我知道,你可能还是很晕,甚至比看之前还晕,那是因为刚才叙述的这个过程是分开的,而且逻辑上并不是顺序的,下面,顺序的说一下,相信你马上就明白了。

主角仍然是傻傻笨笨但任劳任怨的C哥,他一个一个的打开盒子按照里面的纸条上的说明执行你规定的任务。

而你,为了防止他在执行复杂任务时犯傻,把一个盒子指定为“记忆盒子”,并把这个“记忆盒子”的位置写在了一张“神奇纸条”上放在了C哥的口袋里。

现在,C哥正在洗你的袜子,这个时候,他突然接到你的命令要去给你换尿布,而C哥知道自己很笨,所以他自动地掏出了口袋里的纸条,找到了第一个“记忆盒子”,然后拿出一张空白纸条,把装着“给我洗袜子”那张纸条的盒子的编号写在了上面并放进“记忆盒子”。

然后,他把“神奇纸条”放回了口袋里。

当这个任务完成后“神奇纸条”会自动将写在它上面的编号加1,也就是将一个新的、空的“记忆盒子”的编号写在上面。

之后,他会按照刚才的过程把装着袜子的那个盒子的编号以及袜子本身分别放进不同的记忆盒
子(现在已经有三个盒子成为“记忆盒子”,堆栈已经长大了,红色下划线的字体就是这三个盒子里的内容,注意是有先后顺序的)。

再然后,他就去给你换尿布了…
现在,尿布换完了,不过,果不其然,C哥完全忘记了他要给你洗袜子这件事情了,不过,他记得一件事,那就是看口袋里的纸条。

于是,他摸出了口袋里的纸条,上面当然是一个“记忆盒子”的编号,他按照编号找到了第一个“记忆盒子”(按照上一段的顺序应该是第三个“记忆盒子”),里面应该是一双你的袜子,于是他拿到了你的袜子。

但是,他还是不知道
该干什么,于是他再次摸出了“神奇纸条”,这时,纸条上的编号已经自动减1了,于是,他找到了新的“记忆盒子”,里面的纸条上记录着袜子本来放置的盒子的编号,于是,他把袜子放到了那个盒子里。

恩,你可以想到,现在C哥还是不知道要对袜子做些什么,他耐心的又一次摸出了那张“神奇纸条”,这次按照上面的编号,他找到了一张纸条,上面写着的仍然是一个盒子的编号。

C哥按照编号找到了那个盒子,发现那个盒子里的纸条上写着“给我洗袜子!”…至此,C哥又回到了原来的任务——洗袜子。

现在,我希望你已经明白了,堆栈其实就是你指定的一个些存储单元,这些存储单元被指定只用来保存一些特殊信息,比如地址(保护断点)或者一些数据(保护现场),如果你一定要说这个存储区有什么特别的话,那就是:1、这些存储单元内的内容都是CPU在执行某任务中途被打断时的一些相关参数;2、这些存储单元的地址被记在了一个叫堆栈指针的地方,也就是C哥口袋里的那张纸条上!。

相关文档
最新文档