编译器完成动态和堆栈内存分配?

时间:2016-06-29 09:53:22

标签: c memory-management

我知道有几种类型的内存分配。以C语言为例,我们有静态分配,堆栈分配,堆分配。

我知道静态分配是由编译器完成的,但其他两个是在运行时进行的。谁对此负责,是编译器,流程还是操作系统?

我基本上是在询问编译器是否参与运行程序?

2 个答案:

答案 0 :(得分:4)

OS负责堆栈和堆内存分配。

OS为每个线程分配堆栈内存,语言运行时调用OS来分配堆内存。

答案 1 :(得分:-1)

编译器不参与运行程序。它的工作是将程序构建到链接器可以创建可执行文件的阶段,或者在动态构建器的情况下将引导到执行代码的引擎。它只检查某些特定语言必须遵循的协议。

静态分配(存储空间)取决于链接的文件以及代码中静态结构和变量所需的存储空间。

内存管理单元采用动态分配,其中资源已分配给内存中的任务,也就是运行期间堆分配的位置。