进程的虚拟地址空间以进程的text
、data
和bss
段开始。放置此堆分配后,堆会向更大的内存地址增长。但是,在使用堆的一部分之前,必须分配内存块(valloc
等等),否则segfault
会发生(或应该发生)。
堆栈从虚拟地址空间中的初始大地址向更小的值增长。据我所知,这无需虚拟内存分配即可工作。如果在堆的情况下这是不可能的,如何在没有事先分配内存的情况下使用堆栈?(它是相同的线性虚拟地址空间。)
据 ai 所知alloca
,它的实现方式与sub esp, <size>
. 但是堆栈使用的虚拟地址空间区域必须在此之前以某种方式分配,对吗?