Java JNI和旧C++;代码
我现在正在编写一个JNI版本的旧c/c++代码,该代码是我在今年早些时候编写的,将包含在我的android应用程序中。我写了一个桌面应用程序,相当于我在java和C++中写的东西,性能上的差异是突出的,因此我想利用NDK。 我对JNI非常陌生,从我理解事物的方式来看,似乎我必须做一些类型映射Java JNI和旧C++;代码,java,c++,android-ndk,java-native-interface,Java,C++,Android Ndk,Java Native Interface,我现在正在编写一个JNI版本的旧c/c++代码,该代码是我在今年早些时候编写的,将包含在我的android应用程序中。我写了一个桌面应用程序,相当于我在java和C++中写的东西,性能上的差异是突出的,因此我想利用NDK。 我对JNI非常陌生,从我理解事物的方式来看,似乎我必须做一些类型映射jdouble替换double,jint替换int,依此类推。但问题是,我试着不加改动地运行我的一些旧代码,结果成功了!我甚至包括了一些STL库(list和vector),我没有遇到任何问题。我刚刚在Andr
jdouble
替换double
,jint
替换int
,依此类推。但问题是,我试着不加改动地运行我的一些旧代码,结果成功了!我甚至包括了一些STL库(list
和vector
),我没有遇到任何问题。我刚刚在Android.mk文件中包含了APP\u STL:=stlport\u static
所以我的问题是:这样做是否会造成性能损失?还有其他我应该注意的风险吗?在jni中使用C/C++基元类型的缺点是什么?我可以让代码运行得更快,还是不用麻烦了
谢谢
JNI中的NAX本机类型(jint
,…)只是C类型的别名。当内部Java表示与C不完全匹配时,即在比特大小方面,它们是为了代码的可移植性而存在的。因此,混合使用它们时不应该有任何性能开销
混合它们的风险或缺点是,如果它们在某些平台中具有不同的位大小,则在来回转换时可能会丢失位。因此,在构建代码时,您可能需要进行一些额外的检查,以确保代码是安全的。好吧,这让人放心!非常感谢,特别是Java类型有定义良好的宽度和符号--
jint
是有符号的32位值,jlong
是有符号的64位值,jchar
是无符号的16位值,依此类推。这些不会因平台而异。看见