C++ 如何处理共享库中的致命错误?

C++ 如何处理共享库中的致命错误?,c++,error-handling,shared-libraries,dynamic-linking,gmp,C++,Error Handling,Shared Libraries,Dynamic Linking,Gmp,如何处理共享库中的致命错误 我很好奇,因为GNU多精度库(GMP)没有提供从内存不足等错误中恢复的方法。使用LangJMP()或抛出C++异常将起作用,除了它使GMP处于不一致的状态。有没有办法卸载GMP(或另一个共享库)然后重新加载,以解决此问题?卸载共享库:许多系统(包括默认配置的linux)无法从内存不足中恢复。一些软件可以通过“抛出异常”解决方案逃脱惩罚,即使每次都可能泄漏一点内存(除非您愿意在此时释放所有内存)。我能想到的最干净的解决方案是在不同的过程中进行gmp计算,这样你就可以杀死

如何处理共享库中的致命错误


我很好奇,因为GNU多精度库(GMP)没有提供从内存不足等错误中恢复的方法。使用LangJMP()或抛出C++异常将起作用,除了它使GMP处于不一致的状态。有没有办法卸载GMP(或另一个共享库)然后重新加载,以解决此问题?

卸载共享库:许多系统(包括默认配置的linux)无法从内存不足中恢复。一些软件可以通过“抛出异常”解决方案逃脱惩罚,即使每次都可能泄漏一点内存(除非您愿意在此时释放所有内存)。我能想到的最干净的解决方案是在不同的过程中进行gmp计算,这样你就可以杀死它。卸载库似乎没有任何作用。原因是GMP将处于内部不一致状态,因此进一步使用GMP将导致未定义的行为。其想法是从本质上重置GMP的状态以防止这种情况发生。GMP中几乎没有内部状态(指向分配函数的3个指针,仅此而已)。可能变得不一致的是变量,而这不是卸载库可以帮助解决的问题。GMP的进一步使用并不是未定义的,只有OOM操作中涉及的输出变量的进一步使用才是必要的。