堆栈在哪里实现?

时间:2015-03-28 19:42:56

标签: c++ memory-management operating-system stack language-implementation

C ++允许程序员在堆上使用堆栈分配的内存或动态内存。我很清楚堆栈是如何运行的(我已经在C ++中创建了堆栈)但我仍然对如何以及在何处定义“堆栈”感到好奇。

“堆栈”是语言的一项功能,操作系统的功能还是硬件的一项功能?我有一个模糊的想法,从操作系统的角度来看,每个堆栈都与许多活动线程进程中的每一个相关。这告诉我它是在软件级别实现的,而不是CPU或主板的硬连线功能。

我想,在C ++的情况下,编译器可能已经将堆栈的实现插入到每个二进制文件中。或者OS可能会将自己的堆栈实现应用到每个运行的进程中?这是如何定义的?

我发现了一个类似的问题here但我没有看到答案,我希望能更直接地重新陈述这个问题。

2 个答案:

答案 0 :(得分:2)

"是" Stack"语言的功能,操作系统的功能或硬件的功能?"

实际上它是硬件的一个功能。大多数CPU提供堆栈指针寄存器的功能,用于call指令。应该为它保留哪一部分内存实际上是OS(裸机)实现依赖。

答案 1 :(得分:1)

堆栈是操作系统管理的硬件功能。某些指令(例如,过程调用)会影响堆栈。将为上下文切换和处理器模式切换提供硬件支持。

操作系统管理堆栈本身。操作系统分配堆栈。每个进程和每个处理器模式通常都有一个单独的堆栈。

堆栈通常会向下生长。向卡住添加值的硬件指令通常会减少堆栈点寄存器。虚拟内存系统通常将用户堆栈放在用户地址空间的最高位置。