0

在 Solaris 10 和 Linux 上,我使用 mmap 调用来创建内存映射文件,然后从单独的进程中读取该文件。对于大型内存映射文件,在读取(不写入)期间,我得到了 ENOMEM。可能是什么原因,可以采取什么补救措施或前进的方向?我认为内存映射文件并没有完全占用内存。

我正在使用以下调用:

char * segptr = (char *) mmap(0,sz,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);

其中,sz是文件大小,fd是通过 open 打开的文件的文件描述符。

我在尝试为整个空间保留空间时遇到 ENOMEM 失败。

ulimit -a显示:

core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 10
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 29995
virtual memory          (kbytes, -v) unlimited

我可以映射部分文件吗?如果我打开部分文件,那么我可以按需访问全部内容吗?我没有使用setrlimit设置任何限制,所以我想,使用默认值(不知道默认值是什么),我应该增加它吗?请指导。如何将文件映射为较小的块以节省内存的过度使用,从而避免 ENOMEM?

4

0 回答 0