我知道有几种类型的内存分配。以C语言为例,我们有静态分配,堆栈分配,堆分配。
我知道静态分配是由编译器完成的,但其他两个是在运行时进行的。谁对此负责,是编译器,流程还是操作系统?
我基本上是在询问编译器是否参与运行程序?
答案 0 :(得分:4)
OS负责堆栈和堆内存分配。
OS为每个线程分配堆栈内存,语言运行时调用OS来分配堆内存。
答案 1 :(得分:-1)
编译器不参与运行程序。它的工作是将程序构建到链接器可以创建可执行文件的阶段,或者在动态构建器的情况下将引导到执行代码的引擎。它只检查某些特定语言必须遵循的协议。
静态分配(存储空间)取决于链接的文件以及代码中静态结构和变量所需的存储空间。
内存管理单元采用动态分配,其中资源已分配给内存中的任务,也就是运行期间堆分配的位置。