【发布时间】:2011-04-06 02:12:47
【问题描述】:
这个问题是我上一个问题的后续问题
我想知道堆栈是由编译器还是操作系统/架构创建的?另外,操作系统如何知道这些编译器特定的东西?例如:C++ 允许变量在堆栈和堆上创建数据,而 java 只允许堆。
如果堆栈是在堆上创建的,如帖子中所述,系统如何知道它,因为系统只知道堆栈指针和基指针。
【问题讨论】:
-
从 Java 的角度看,我看不出这两个问题是如何联系起来的。您确实意识到 JVM 有效地充当 Java 世界中的平台/架构,是吗?
-
@Byron 这只是我之前问题的后续。问题也不在于了解堆栈。在我之前的帖子中,有人说可以在堆上创建堆栈以防止缓冲区溢出之类的事情。那么如果在堆上创建,系统怎么知道呢?
-
@brett,是的,很明显您需要基本了解堆栈和堆是什么。仔细阅读欺骗答案。您可以在堆中创建特定的堆栈数据结构,但这不是我们正在谈论的基本堆栈结构。
-
@brett,我刚刚阅读了您最后接受的答案中的 cmets。内存都是一样的,但从概念上讲,栈 = 编译时分配的内存,堆 = 动态分配的内存。我希望这很清楚。
标签: java c compiler-construction operating-system