【发布时间】:2011-12-14 12:12:40
【问题描述】:
mmap(当使用 MAP_ANONYMOUS 调用时,即用于分配内存时)是否总是返回比先前调用更高的内存地址?如果不是这样,有没有办法让它总是返回更高的地址?
【问题讨论】:
-
你为什么需要它来做这个?
-
好吧,在我的应用程序中,我将通过 mmap 分配的所有内存的起始地址保存在一个数组中,并且我需要在某些时候搜索它们。让它们以排序形式让我能够执行二进制搜索。你可以说,我可以在每次调用 mmap 之后对它们进行排序,但问题是这个数组需要从信号处理程序内部读取,而且你知道不能在信号处理程序内部使用互斥锁或信号量,这会成为一个问题如果某个线程在从信号处理程序内部读取数组时对数组进行排序。
-
那么在创建映射的时候把映射的地址插入正确的位置呢?假设您不是每秒创建十亿个映射,这基本上是零成本,并且您的数组已排序。如果您无法为每个
mmap提供一个额外的memmove,那就有问题了。 -
@MetallicPriest 正如我在其他地方告诉你的(在另一个问题的另一个答复中),你可以尝试在 SIGSEGV 处理程序中使用互斥锁,我相信它通常可以在今天的 Linux 系统上运行,即使它不保证也不符合 Posix。
-
两个cmets:(1)添加新条目时,可以对数组的一个副本进行排序,然后翻转指针。 (2) 排序到底有多重要?如果
mmaped 区域的数量相当少,线性搜索可能是可行的。