如何确保分配缓冲区在内存中

时间:2015-11-18 01:21:00

标签: c linux memory

假设我在C中使用mmap分配缓冲区。是否有任何linux操作可用于确保此缓冲区已被分页到内存中,并且页表中有此缓冲区的条目。我想要这个,因为我看到我的应用程序出现了一些页面错误,即使我的内存远大于应用程序要求。我正在使用CentOS 7.

1 个答案:

答案 0 :(得分:2)

通过MAP_POPULATE as a flag to the mmap call。这正是它的目的所在。它不会保证页面在内存压力下不会出页,但如果可能的话,它会在mmap时将它们分页。引用手册页:

  

MAP_POPULATE(自Linux 2.5.46起)

     

填充(prefault)页面表以进行映射。对于文件映射,这会导致对文件进行预读。以后访问映射不会被页面错误阻止。自Linux 2.6.23起,仅支持私有映射的MAP_POPULATE。

如果你真的想强迫东西被锁定在内存中,你也可以尝试传递MAP_LOCKED标志(mlock s内存阻止页面出来),但这很危险,因为它会阻止它内存管理因此,mlock页上的上限通常很低,以避免引起问题。