gpt4 book ai didi

java - 堆栈由编译器或操作系统/架构创建

转载 作者:搜寻专家 更新时间:2023-11-01 01:30:07 25 4
gpt4 key购买 nike

这个问题是我上一个问题的跟进

stack growth direction

我想知道堆栈是由编译器还是操作系统/架构创建的?另外操作系统如何知道这些编译器特定的东西?例如:C++ 允许变量在堆栈和堆上创建数据,而 java 只允许堆。

此外,如果堆栈是在堆上创建的,如帖子中所述,系统如何知道它,因为系统只知道堆栈指针和基指针。

最佳答案

堆栈是操作系统为您的程序分配的内存位置。一旦它被分配,操作系统将一个寄存器(在 x86 上,它是 esp)设置到堆栈所在的位置,然后它启动你的程序。编译器知道,如果他们使用这个寄存器中的值作为堆栈指针,他们会没事的。然后他们就可以为所欲为。操作系统只是分配一个区域。它不关心它之后如何使用。

操作系统不知道您的程序主要使用堆栈还是堆。然而,由于大多数编程语言以某种方式使用堆栈,它知道它应该分配一个。例如,Java 将其对象存储在堆上,但 JVM 的大多数实现将使用堆栈来维护调用框架(和原始局部变量),因此它也需要堆栈。

关于java - 堆栈由编译器或操作系统/架构创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com