为什么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()从一个文件编辑。

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...