C ++允许程序员在堆上使用堆栈分配的内存或动态内存。我很清楚堆栈是如何运行的(我已经在C ++中创建了堆栈)但我仍然对如何以及在何处定义“堆栈”感到好奇。
“堆栈”是语言的一项功能,操作系统的功能还是硬件的一项功能?我有一个模糊的想法,从操作系统的角度来看,每个堆栈都与许多活动线程进程中的每一个相关。这告诉我它是在软件级别实现的,而不是CPU或主板的硬连线功能。
我想,在C ++的情况下,编译器可能已经将堆栈的实现插入到每个二进制文件中。或者OS可能会将自己的堆栈实现应用到每个运行的进程中?这是如何定义的?
我发现了一个类似的问题here但我没有看到答案,我希望能更直接地重新陈述这个问题。
答案 0 :(得分:2)
"是" Stack"语言的功能,操作系统的功能或硬件的功能?"
实际上它是硬件的一个功能。大多数CPU提供堆栈指针寄存器的功能,用于call
指令。应该为它保留哪一部分内存实际上是OS(裸机)实现依赖。
答案 1 :(得分:1)
堆栈是操作系统管理的硬件功能。某些指令(例如,过程调用)会影响堆栈。将为上下文切换和处理器模式切换提供硬件支持。
操作系统管理堆栈本身。操作系统分配堆栈。每个进程和每个处理器模式通常都有一个单独的堆栈。
堆栈通常会向下生长。向卡住添加值的硬件指令通常会减少堆栈点寄存器。虚拟内存系统通常将用户堆栈放在用户地址空间的最高位置。