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

时间:2014-12-30 14:28:08

标签: c linux solaris mmap diskspace

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

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

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

2 个答案:

答案 0 :(得分:3)

由于虚拟内存不足,进程无法预测内存访问会失败的事实,尤其是使用您使用的mmaped稀疏文件技术时。

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

答案 1 :(得分:0)

为什么不将作为二进制数据的数据保存到文件中,然后在需要处理时读回数据。如果你不断积累过多的数据来处理磁盘的巨大存储空间,你的RAM就会被填满。

希望这会有所帮助。