在内存不足之前抢先暂停应用程序会导致分段错误

我有一个大型应用程序,使用malloc和mmap分配大量内存我想捕获所有失败方法并尝试恢复.为了解决交换空间不足的情况,我检查malloc和realloc的返回,如果它们为null,则应用程序可以提示用户在继续之前清除一些磁盘空间.

该应用程序还使用稀疏文件使用mmap分配许多大型数据阵列.我希望能够从映射内存写入因磁盘空间限制而失败的情况中恢复.有没有办法做到这一点,或者我最好在这种情况下合并磁盘空间监控并暂停相关线程.

我在c工作,应用程序需要在Linux和solaris上运行

解决方法:

由于虚拟内存不足,特定于您正在使用的mmaped稀疏文件技术,进程无法预测内存访问将失败的事实.

你可能会陷入sigsegv,但这种方法存在问题(见Segmentation fault handling).否则,更简单的解决方案是监视文件系统可用空间并预防性地冻结/停止最耗费的过程.

上一篇:Android性能测试-内存详解


下一篇:为什么我不能在64位内核上mmap(MAP_FIXED)32位Linux进程中的最高虚拟页面?