【计算机系统】程序栈的作用与工作原理

简介: 【计算机系统】程序栈的作用与工作原理

程序栈的作用与工作原理

一、栈的提出

一个函数具有参数和局部变量等临时存储信息,在调用函数的时候需要这些信息才能得出函数的结果。一种方式是用寄存器存储,每次调用函数的时候从寄存器中读取这些临时值,这样操作的问题在于:


1、寄存器的数量有限,而一个函数的临时信息可能很多。

2、函数嵌套结构可能重复使用这些寄存器,这要求在调用一层函数前要将临时信息存储到寄存器,调用结束后要恢复这些信息。


例如图1所示函数嵌套结构,在调用C前要把C的局部变量和传递给C的参数保存到寄存器,调用结束后要恢复这些寄存器在函数B调用过程中的值。可见在这些函数结构的设计中,用寄存器保存信息会使效率大大降低(即使读写寄存器速度快),而且会使编写程序时除了考虑程序逻辑本身,还要考虑存储的问题。


image.png

3、多任务并行时,问题的本质和函数嵌套结构相同,即寄存器存储也不利于多任务进行。

综上,需要引入一种新的数据结构来临时存储这些信息,便于函数调用和多任务执行等。

二、栈的工作原理

以上述无法很好解决的函数嵌套为例。如图2,开辟一个专门的内存空间用来存放这些临时信息,遵循栈“先入后出”的数据结构特点,就可以实现A-B-C-B-A的函数嵌套使用:函数执行到A之前,将A的信息压栈;执行到B前,将B的信息压栈;执行到C前,将C的信息压栈;函数C调用结束,将C的信息弹出栈,随后弹出B的信息、A的信息。这样一来不用反复修改某个地址的信息;二来函数嵌套的信息调用完全转化成指针操作,事实上就只需要保存栈顶指针的信息就可以表示入栈和出栈操作,而栈顶指针就保存在专门的栈操作寄存器%rsp中。

image.png

对于多任务的情况,事实上每个任务都有自己的栈空间,或者说新建一个任务,内存就会为这个任务开辟一个程序栈。于是多任务的并行就可以通过栈的切换来实现,因此栈这一数据结构也是并行编程的基础。

值得注意的是,这片临时信息存储地并非无限的,当存储的临时信息过量时就会发生栈的溢出(Stack Overflow),使程序报错。


目录
相关文章
|
18天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
94 9
|
9天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
19 1
|
12天前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
15天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
16天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
44 4
|
1月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
31 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
21天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
初步认识栈和队列
初步认识栈和队列
60 10
|
1月前
数据结构(栈与列队)
数据结构(栈与列队)
18 1
|
1月前
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
46 3