3

我现在正在编写我今年早些时候编写的旧 c/c++ 代码的 JNI 版本,以包含在我的 android 应用程序中。我写了一个桌面应用程序,相当于我用 Java 和 C++ 编写的,性能差异很突出,因此我想利用 ndk。

我对 JNI 非常陌生,而且我理解事物的方式,似乎我必须做一些类型映射;jdouble替换doublejint替换int,等等。问题是,我已经尝试过不改变运行一些旧代码,而且效果很好!我什至包含了一些 STL 库(listvector),我没有遇到任何问题。我刚刚包含APP_STL := stlport_static在 Android.mk 文件中。

所以我的问题是:这样做有性能损失吗?还有其他我应该注意的风险吗?在我的 jni 中使用 C/C++ 原始类型有什么缺点?我可以让代码运行得更快,还是我不应该打扰?

谢谢,

纳克斯

4

1 回答 1

2

JNI ( jint, ...) 中的原生类型只是typedefC 类型的别名。当内部 Java 表示与 C 不完全匹配时,它们的存在是为了代码可移植性,即关于位大小。因此,混合它们不应该有任何性能开销。

混合它们的风险或缺点是,如果它们在某些平台上具有不同的位大小,则在来回转换时可能会丢失位。因此,您可能希望在构建代码时进行一些额外的检查以确保其安全。

于 2013-03-08T09:22:47.727 回答