我有一个大型应用程序,使用malloc
和mmap
分配大量内存我想捕获所有失败方法并尝试恢复。为了解决交换空间不足的情况,我检查malloc
和realloc
的返回值,如果它们为空,则应用程序可以提示用户在继续之前清除一些磁盘空间。
应用程序还使用稀疏文件使用mmap
分配许多大型数据阵列。我希望能够从映射内存写入因磁盘空间限制而失败的情况中恢复。有没有办法做到这一点,或者我最好在此场景中合并磁盘空间监控并停止相关线程。
我在c中工作,应用程序需要在linux和solaris上运行
答案 0 :(得分:3)
由于虚拟内存不足,进程无法预测内存访问会失败的事实,尤其是使用您使用的mmaped稀疏文件技术时。
您可能会捕获sigsegv但这种方法存在问题(请参阅Segmentation fault handling)。否则,更简单的解决方案是监视文件系统可用空间并预防性地冻结/停止最耗费的过程。
答案 1 :(得分:0)
为什么不将作为二进制数据的数据保存到文件中,然后在需要处理时读回数据。如果你不断积累过多的数据来处理磁盘的巨大存储空间,你的RAM就会被填满。
希望这会有所帮助。