Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNI和旧C++;代码_Java_C++_Android Ndk_Java Native Interface - Fatal编程技术网

Java JNI和旧C++;代码

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

我现在正在编写一个JNI版本的旧c/c++代码,该代码是我在今年早些时候编写的,将包含在我的android应用程序中。我写了一个桌面应用程序,相当于我在java和C++中写的东西,性能上的差异是突出的,因此我想利用NDK。 我对JNI非常陌生,从我理解事物的方式来看,似乎我必须做一些类型映射
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位值,依此类推。这些不会因平台而异。看见