堆栈在哪里实现

Where is the stack implemented?

本文关键字:实现 在哪里 堆栈      更新时间:2023-10-16

C++允许程序员使用堆栈分配的内存或堆上的动态内存。我非常清楚堆栈是如何操作的(我在C++中创建了堆栈作为练习),但仍然对"堆栈"是如何定义的以及在哪里定义感到好奇。

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

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

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

"堆栈"是语言的一个功能、操作系统的一个特征还是硬件的一个特性?"

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

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

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

烟囱通常向下生长。将值添加到阻塞的硬件指令通常会递减堆栈点寄存器。虚拟存储器系统通常将用户堆栈放置在用户地址空间的最高部分。