计算机栈原理
Posted lucy-xyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机栈原理相关的知识,希望对你有一定的参考价值。
内存的不同用途
根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行。但是不管什么样的操作系统、什么样的计算机架构,进程使用的内存都可以按照功能大致分为以下4个部分:
(1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。
(2)数据区:用于存储全局变量等。
(3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。动态分配和回收是堆区的特点。
(4)栈区:用于动态地存储函数之间的关系,以保证被调用函数在返回时恢复到母函数中继续执行。
在Windows平台下,高级语言写出的程序经过编译链接,最终会变成PE文件。当PE文件被装载运行后,就成了所谓的进程。
PE文件代码段中包含的二进制级别的机器代码会被装入内存的代码区(.text),处理器将到内存的这个区域一条一条地取出指令和操作数,并送入运算逻辑单元进行运算;如果代码中请求开辟动态内存,则会在内存的堆区分配一块大小合适的区域返回给代码区的代码使用;当函数调用发生时,函数的调用关系等信息会动态地保存在内存的栈区,以供处理器在执行完被调用函数的代码时,返回母函数。
如果把计算机看成一个有条不紊的工厂,我们可以得到如下类比:
< CPU是完成工作的工人。
< 数据区、堆区、栈区等则是用来存放原
原料、半成品、成品等各种东西的场所。
< 存放在代码区的指令则告诉CPU要做什么,怎么做,到哪里去领原材料,用什么工具来做,做完以后把成品放到哪个货 仓去。
< 值得一提的是,栈除了扮演存放原料、半成品的仓库之外,它还是车间调度主任的办公室。
栈与系统栈
从计算机科学的角度来看,栈指的是一种数据结构,是一种先进后出的数据表。栈的最常见操作有两种:压栈(PUSH)、弹栈(POP);
用于标识栈的属性也有两个:栈顶(TOP)、栈底(BASE)。
栈在内存中的存放是高地址是栈底(Base),低地址是栈顶(Top)。
以上是关于计算机栈原理的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-41]:目标系统 - 系统软件 - Linux下的网络通信-1-计算机网络拓扑架构ISO协议栈以太网协议栈与工作原理
[架构之路-41]:目标系统 - 系统软件 - Linux下的网络通信-1-计算机网络拓扑架构ISO协议栈以太网协议栈与工作原理