C++ mmap一个10 GB的文件并将其加载到内存中
如果我想C++ mmap一个10 GB的文件并将其加载到内存中,c++,linux,mmap,C++,Linux,Mmap,如果我想mmap一个10 GB的文件并立即将整个文件加载到物理内存中,我该怎么做? 我不想使用像mlock这样的函数,因为它需要root权限。 有可以满足我需求的系统调用吗 (我有足够的内存。)阅读: MAP_填充(自Linux 2.5.46起) 为映射填充(预故障)页表。存档 映射时,这会导致对文件进行预读。后期访问 到映射将不会被页面错误阻止。 MAP\u POPULATE仅支持私有映射,因为 Linux 2.6.23 发出您的请求,并做好短暂等待的准备(除非超出进程限制)(取决于磁盘带宽和
mmap
一个10 GB的文件并立即将整个文件加载到物理内存中,我该怎么做?我不想使用像
mlock
这样的函数,因为它需要root权限。有可以满足我需求的系统调用吗 (我有足够的内存。)阅读: MAP_填充(自Linux 2.5.46起) 为映射填充(预故障)页表。存档 映射时,这会导致对文件进行预读。后期访问 到映射将不会被页面错误阻止。
MAP\u POPULATE
仅支持私有映射,因为
Linux 2.6.23
发出您的请求,并做好短暂等待的准备(除非超出进程限制)(取决于磁盘带宽和缓存)。+1若要添加此项,您可以选择
madvise(MADV\u WILLNEED)
如果您不想在mmap
中进行阻止。当然,您放弃了“即时呈现”保证,但整个范围仍然会立即加载到RAM中,只是异步加载。尽管除非您成功地mlock
,否则您永远不会得到任何保证(页面可能随时被调出或丢弃),因此这是可以接受的。