4

C++ 允许程序员使用堆栈分配的内存或堆上的动态内存。我对堆栈的操作方式非常清楚(我在 C++ 中创建了堆栈作为练习),但仍然对“堆栈”的定义方式和位置感到好奇。

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

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

我在这里发现了一个类似的问题,但我没有看到它得到回答,我希望更直接地重新陈述这个问题。

4

2 回答 2

2

““堆栈”是语言的特性、操作系统的特性还是硬件的特性?

这实际上是硬件的一个特性。大多数 CPU 提供堆栈指针寄存器的功能,用于call指令。应该为其保留哪一部分内存实际上取决于操作系统(裸机)实现。

于 2015-03-28T19:46:26.617 回答
1

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

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

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

于 2015-03-28T19:47:00.790 回答