这个问题是我上一个问题的跟进
我想知道堆栈是由编译器还是操作系统/架构创建的?另外操作系统如何知道这些编译器特定的东西?例如:C++ 允许变量在堆栈和堆上创建数据,而 java 只允许堆。
此外,如果堆栈是在堆上创建的,如帖子中所述,系统如何知道它,因为系统只知道堆栈指针和基指针。
最佳答案
堆栈是操作系统为您的程序分配的内存位置。一旦它被分配,操作系统将一个寄存器(在 x86 上,它是 esp
)设置到堆栈所在的位置,然后它启动你的程序。编译器知道,如果他们使用这个寄存器中的值作为堆栈指针,他们会没事的。然后他们就可以为所欲为。操作系统只是分配一个区域。它不关心它之后如何使用。
操作系统不知道您的程序主要使用堆栈还是堆。然而,由于大多数编程语言以某种方式使用堆栈,它知道它应该分配一个。例如,Java 将其对象存储在堆上,但 JVM 的大多数实现将使用堆栈来维护调用框架(和原始局部变量),因此它也需要堆栈。
关于java - 堆栈由编译器或操作系统/架构创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606188/