0

我敢肯定人们一直都在这样做,但我在这里过得很艰难。我将浮点数组传递给 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 来查找浮点数组的大小。一个一个地复制元素。执行你的东西,然后创建一个新的浮点数组。
一定要调用ReleaseFloatArrayElements,否则会有泄漏。

于 2011-08-10T05:30:07.993 回答