0

人々はいつもこれをしていると思いますが、私はここで苦労しています。float の配列を JNI 関数に渡していますが、ARM の NEON SIMD 機能を使用して、この配列に対していくつかの操作を実行するつもりです。私は決してCの専門家ではないので、ちょっと行き詰まっています。これが私がやろうとしていることのスケッチです。

JNIEXPORT jfloatArray JNICALL Java_com_blah (JNIEnv *env, jobject obj, jfloatArray input)
{
    jfloat * x;
    float32_t * y;

    x = (*env)->GetFloatArrayElements(env,input,0);

    // Assign x to y

    // Perform some stuff on y

    // Return y as a Java float array back to caller

}

C を使用して配列全体を型キャストする方法を考えなければなりません。また、Java から配列エントリを抽出するときに直接行う方法があるかもしれません ( x = (*env)->GetFloatArrayElements(env,input,0))。これについての正しい方法は何ですか?

4

1 に答える 1

0

配列全体を y に割り当てる必要はないと思います。どうしても必要な場合は、GetArrayLength を使用して float 配列のサイズを確認できます。要素を 1 つずつコピーします。作業を実行してから、新しい float 配列を作成します。
必ず ReleaseFloatArrayElements を呼び出してください。そうしないと、リークが発生します。

于 2011-08-10T05:30:07.993 に答える