微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么Linux msync返回“无法分配内存”? 有没有可能解决这个错误代码?

下午好,我们正在为Centos Linux Release x86_32和Microsoft Windows构build一个原型推理器。 原型的一部分是使用1800元素caching的MemoryMappedFile程序。 对于Centos Linux 5.5,我们调用msync来同步文件和内存映射。 在过去的几个星期里,msync一直运行正常。 今天,msync和perror(“msync”)返回“无法分配内存”。 为什么Centos Linux Version 5.5 x86_32 msync返回“无法分配内存”? 有没有可能在Centos Linux 5.5 x86_32上修复“Can not Allocate memory”错误。 谢谢。 内存映射文件程序代码的摘录如下所示:

typedef std::multimap<char *,Range>::const_iterator I; std::pair<I,I> b = mmultimap.equal_range(TmpPrevMapPtr); for (I i=b.first; i != b.second; ++i){ std::deque<Range>::iterator iter; iter = std::lower_bound(ranges_type.begin(),ranges_type.end(),i->second); if (iter != ranges_type.end() && !(i->second < *iter)){ sz1 = ranges_type.size(); ranges_type.erase(iter); sz2 = ranges_type.size(); } } erasecount = mmultimap.erase(TmpPrevMapPtr); #if defined(__windows) retval = FlushViewOfFile(TmpPrevMapPtr,mappedlength); retval = UnmapViewOfFile(TmpPrevMapPtr); #elif defined(__unix) retval = msync(TmpPrevMapPtr,mappedlength,MS_SYNC); if (retval == -1){ perror("msync"); } retval = munmap(TmpPrevMapPtr,mappedlength); if (retval == -1){ perror("munmap"); throw cException(ERR_MEMORYMAPPING,TempFileName); } #endif

在Windows上列出所有文件,dirent.h

硬件加速缩放MFT在Windows7中

如何获得所有的Windows组?

在结构中封装IntPtr 会导致midistream函数出错,但将数组展开为一堆字段

如何启用/禁用防火墙?

msync手册页指出:

ENOMEM The indicated memory (or part of it) was not mapped.

这是errno值perror()打印给你。 所以你不知怎的试图msync()内存,你还没有mmap()从一个文件编辑。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐