0

考虑到这一点 ,因为这个区域像动态加载的库一样映射文件,我觉得理想情况下它应该长大。这可以通过启动 RLIMIT_STACK 和堆开始之间的 mmap 区域来实现。在这种情况下会出现什么问题。

如果它长大了,那么如何创建一个新的内存映射区域。假设我们希望将 abc.so 的代码映射到虚拟地址空间中,那么我们必须在向下方向创建 sizeof(abc.so) 空间,并从该区域的底部开始映射文件。这是它的工作原理吗?

4

1 回答 1

1

您确定您没有将图中的“向上”与地址增加意义上的“向上”混淆吗?请注意,该图在顶部有低地址[编辑:实际上不,它在底部有低地址,我的错]。

映射区域向较低地址增长。为什么你觉得它应该朝另一个方向发展?如果映射的文件和堆从地址空间的相反方向开始并朝着彼此增长,则可以在区域冲突之前最大化地址空间利用率。

当您映射文件时,您只需映射文件支持的连续地址范围(从低地址到高地址,这是您所期望的)。当您访问一个页面时,将发生页面错误,并且文件内容被复制到内存页面框架中。

于 2009-11-30T13:15:37.083 回答