3

私は今、Androidアプリケーションに含めるために、今年初めに作成した古いc /c++コードのJNIバージョンを作成しています。JavaとC++の両方で書いているものと同等のデスクトップアプリケーションを作成しましたが、パフォーマンスの違いが顕著であるため、ndkを利用したいと思います。

私はJNIに非常に慣れていないので、物事を理解する方法として、何らかの型マッピングを行う必要があるようです。jdouble置き換えるdoublejint置き換えるintなど。ただし、古いコードの一部を変更せずに実行してみましたが、機能しました。いくつかのSTLライブラリ(listvector)も含まれていますが、問題はありませんでした。APP_STL := stlport_staticAndroid.mkファイルに含めました。

だから私の質問は:これを行うことでパフォーマンスのペナルティはありますか?他に知っておくべきリスクはありますか?jniでC/C ++プリミティブ型を使用することの欠点は何ですか?コードをより速く実行させることはできますか、それとも気にしないでください。

ありがとう、

NAX

4

1 に答える 1

2

JNI(jint、...)のネイティブ型はtypedef、C型の単なるエイリアスです。これらは、内部Java表現がCと完全に一致しない場合、つまりビットサイズに関して、コードの移植性のために存在します。したがって、それらを混合する際にパフォーマンスのオーバーヘッドが発生することはありません。

それらを混合することのリスクまたはデメリットは、プラットフォームによってビットサイズが異なることが判明した場合、前後に変換するときにビットが失われる可能性があることです。したがって、コードをビルドするときに、安全であることを確認するために追加のチェックを行うことをお勧めします。

于 2013-03-08T09:22:47.727 に答える