我有一个大型应用程序,使用malloc和mmap分配大量内存我想捕获所有失败方法并尝试恢复.为了解决交换空间不足的情况,我检查malloc和realloc的返回,如果它们为null,则应用程序可以提示用户在继续之前清除一些磁盘空间.
该应用程序还使用稀疏文件使用mmap分配许多大型数据阵列.我希望能够从映射内存写入因磁盘空间限制而失败的情况中恢复.有没有办法做到这一点,或者我最好在这种情况下合并磁盘空间监控并暂停相关线程.
我在c工作,应用程序需要在Linux和solaris上运行
解决方法:
由于虚拟内存不足,特定于您正在使用的mmaped稀疏文件技术,进程无法预测内存访问将失败的事实.
你可能会陷入sigsegv,但这种方法存在问题(见Segmentation fault handling).否则,更简单的解决方案是监视文件系统可用空间并预防性地冻结/停止最耗费的过程.