堆和堆栈内存划分的主要来源是什么?

时间:2019-01-27 07:02:21

标签: heap-memory stack-memory

我阅读了很多有关堆和栈内存的解释,无论如何它们都在来源上模糊了。首先,我了解这种记忆如何与软件一起工作,但我不了解该部门的主要来源。我假设它们是相同的非专业物理内存,但是...

例如,说我们有没有任何操作系统的PC,并且我们想为x86创建一些具有汇编语言的可启动程序。我以为我们可以做到这一点(我个人不知道汇编语言,但是总有人写OS)。因此,主要问题是我们是否已经可以使用堆和栈进行操作,还是必须为此创建一些内存管理机制?如果是的话,那么在裸机编程方面怎么可能?

1 个答案:

答案 0 :(得分:0)

在其他答案中添加一些内容,虽然很正确,但可能还不够完整。

堆和堆栈是“管理”内存的两种(软件)方法。通常,物理内存是程序可以读取和写入的平面单元阵列。由运行的程序根据需要使用这些单元。但是还有更多话要说。

1 ^东西。堆完全是软件,而堆栈也是(或主要是)硬件。大多数处理器具有支持堆栈的硬件(或CPU指令),而大多数(或全部?)并不关心堆。更重要的是:有一些小型的嵌入式处理器(或微控制器),它们具有单独的堆栈区域-与程序可以创建“堆”的其他ram区域完全不同。

2 ^的东西。当谈到“程序”时,人们可以/应该认为操作系统一个程序,专门用于管理资源(包括内存),并且可以通过“应用程序”(它们是程序)进行扩展。 )。在这种情况下,可以通过操作系统和应用程序共同管理堆栈和堆。

因此,要回答您的主要问题,90%的正确答案是:在裸机中,您已经有一个堆栈-也许您必须发出一些简短的指令来进行设置,但这很简单。但是您没有堆,必须在程序中实现它。首先,您留出一些内存来用作堆栈;然后您可以留出更多的内存用作堆,不要忘记必须为正常/静态数据保留一些内存。程序的管理堆的部分应该知道该怎么做,使用但不错误地覆盖堆栈和静态数据来执行其功能。