内存映射文件的Solaris mmap因ENOMEM而失败

时间:2017-02-16 17:20:42

标签: c++ c memory-management mmap enomem

在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?

0 个答案:

没有答案
相关问题