重载内存映射文件加载器(C ++)

是否有可能超载内存映射的文件加载器? 在发生页面错误的情况下,Linux内核不会从磁盘加载所请求的数据,而是调用用户定义的函数来填充内存页面。

我想使用这个巨大的压缩光栅文件的内存映射。 使用的压缩algorithm允许快速块解压缩。 用户自定义的加载函数可以实时地对文件页面进行解压缩。

压缩文件是只读的。 用户空间解决scheme是首选。

是否有可能超载内存映射的文件加载器? 在发生页面错误的情况下,Linux内核不会从磁盘加载所请求的数据,而是调用用户定义的函数来填充内存页面。

这是可能的,一些图书馆也是这样做的。 参见libsigsegv 。

使用sigaction为您的处理程序使用以下签名安装SIGSEGV的信号处理程序:

 void sigsegv_handler(int, siginfo_t* si, void*) { si->si_addr; // Memory location which caused the page fault. // mmap the missing page and return here // On error alternatives: // * restore the previous SIGSEGV handler and return (the default one dumps core), or // * abort() (dumps core), or // * _exit(EXIT_FAILURE). }