我正在编写一个内核,需要(并希望)将多个堆栈和堆放入虚拟内存中,但我无法有效地将它们放置在适当的位置。普通程序如何实现此功能?
在32位系统提供的有限虚拟内存中,栈和堆如何放置以尽可能具有增长空间?
例如,当一个简单程序加载到内存中时,其地址空间的布局可能如下所示:
在这种情况下,堆可以增长到虚拟内存允许的大小(例如,堆可以增长到栈的大小),我认为这是大多数程序中堆的工作方式。没有预定义的上限。
许多程序有共享库,它们被放置在虚拟地址空间的某个位置。然后有一些多线程程序,每个线程都有一个堆栈。.NET程序有多个堆,所有这些堆都必须能够以某种方式增长。
我只是不明白,在不对所有堆和栈的大小设置预定义限制的情况下如何合理高效地完成这项工作。
在32位系统提供的有限虚拟内存中,栈和堆如何放置以尽可能具有增长空间?
例如,当一个简单程序加载到内存中时,其地址空间的布局可能如下所示:
[ Code Data BSS Heap-> ... <-Stack ]
在这种情况下,堆可以增长到虚拟内存允许的大小(例如,堆可以增长到栈的大小),我认为这是大多数程序中堆的工作方式。没有预定义的上限。
许多程序有共享库,它们被放置在虚拟地址空间的某个位置。然后有一些多线程程序,每个线程都有一个堆栈。.NET程序有多个堆,所有这些堆都必须能够以某种方式增长。
我只是不明白,在不对所有堆和栈的大小设置预定义限制的情况下如何合理高效地完成这项工作。