从go或java程序调用c有什么危险?

xn1cxnb4  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(262)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

上个月关门了。
改进这个问题
这可以通过标准机制(例如jni for java)实现。如果c库出错了怎么办?说一个分割错误。那会使控制过程崩溃吗?
相比之下,从go程序调用go lib似乎更安全(或者从java程序调用java lib)。lib可以抛出异常,但容器可以继续。当然,像outofmemory这样的事情可能会打乱整个过程,但至少发生的事情是清楚的。

gupuwyp2

gupuwyp21#

说一个分割错误。那会使控制过程崩溃吗?
在这方面,从c调用的c和从java调用的c没有太大区别。如果未经处理,sigsegv将使进程崩溃;否则它将执行处理程序所做的任何操作。但一般来说,忽略关键故障从随机程序行为中恢复是不明智的;您的地址空间可能处于某种奇怪的状态,您没有编写代码来处理。
通过jni调用c的真正问题是,c会以设计上在java中不可能的方式损坏java结构(比如jvm堆)。而腐败直到一段时间后才出现,导致调试受挫。

相关问题