【发布时间】:2015-12-04 22:11:07
【问题描述】:
我目前正在学习操作系统课程,并且正在讨论进程的内存部分。当一个程序被加载到内存中并因此成为一个进程时,可以使用两种形式的内存:堆栈数据结构或堆(我不太确定它是否称为堆,因为它实际上使用了堆数据结构)。我已经看过这个链接Do the Stack and Heap both exist within your systems RAM?,它在一定程度上帮助了我,但实际上并没有回答我的问题。
现在我的问题是:
堆栈是存储局部变量的内存。当一个函数被调用时,它和它的所有变量一起被压入堆栈,当它返回时,它被弹出堆栈。这是一种暂时的记忆。对于堆,对内存有更多的控制,因为一旦分配,分配的内存就会一直留在那里,直到显式释放。但是,当我们提到堆栈和堆时,我们是在谈论 RAM 吗?进程A的栈和堆是否驻留在RAM中进程A的地址空间中?
我知道由于分页并非总是如此,因为操作系统可以进行有效的内存管理并在不使用进程时将一些内存放在磁盘上。让我们假设没有使用分页来隔离这两个想法并更清楚地了解特定进程在内存中发生的事情。
【问题讨论】:
-
简短的回答是“是”,但是一些 MPU 实现了一个小的内部堆栈,它不在可寻址内存中。
标签: c memory-management operating-system