很清楚如何将mlockall()
和malloc()
结合起来锁定进程在其生命周期中分配的所有页面。通过阅读文档我不清楚的是,释放已锁定内存是否意味着自动解锁相应的页面。
答案 0 :(得分:2)
如果free
将内存返回给系统(即它已分配mmap
并且将被munmap
释放),则锁定将在取消映射时自动删除。这通常是大量分配的情况。
如果free
将内存返回到进程内管理的堆,则锁定将保留。这通常是小额分配的情况。
在GNU / Linux上,您可以使用mallopt
来获取和设置使用mmap
的分配阈值;默认(在我的电脑上,至少)是128kb。在其他Unix版本中,如果需要该级别的控制,则可能需要直接使用mmap
。