在Solaris 10和Linux上,我使用mmap调用来创建内存映射文件,然后从单独的进程读取文件。对于大内存映射文件,在读取(无写入)期间,我将获得ENOMEM。可能是什么原因以及什么可以补救或前进?我认为内存映射文件并没有占用整个内存。
我正在使用以下电话:
<meta property="og:image" content="http://sampledomain.com/sampleimage.png" />
其中,char * segptr = (char *) mmap(0,sz,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
是文件大小,sz
是通过open打开的文件的文件描述符。
我在尝试为整体预留空间时遇到ENOMEM故障。
fd
显示:
ulimit -a
我可以映射部分文件吗?如果我打开部分文件,那么我能按需访问整个内容吗?我没有使用setrlimit设置任何限制,所以我猜,使用默认值(不知道默认值是什么),我应该增加吗?请指导。 如何以较小的块映射文件以节省内存使用量,从而避免使用ENOMEM?