【发布时间】:2020-09-26 21:30:30
【问题描述】:
在Java中我称之为矩阵乘法(用于计算方阵的幂):
// Java
public class Matrix {
// ...
native void power(double[] a, double[] b, int rows, int cols, int exponent);
// ...
}
在 C++ 中,这是通过以下方式实现的:
JNIEXPORT void JNICALL power(JNIEnv* env, jobject o,
jdoubleArray vals, jdoubleArray originalMatrix, jint aRows, jint aCols, jint i) {
jboolean isCopy;
// Get input array and result array to write values to.
jdouble* pa = env->GetDoubleArrayElements(vals, &isCopy);
jdouble* po = env->GetDoubleArrayElements(originalMatrix, &isCopy);
// Keeping the result of the k-th multiplication.
jdouble* tmp = new double[aRows * aCols];
for (int k = 1; k < i; k++) {
multiply(po, pa, tmp, aRows, aCols, aCols); // implemented elsewhere (but should be ok)
memcpy(tmp, pa, aCols * aRows);
}
env->ReleaseDoubleArrayElements(vals, pa, 0); // <- THIS OK?
env->ReleaseDoubleArrayElements(originalMatrix, po, 0);
delete[] tmp;
}
【问题讨论】:
标签: java c++ memory java-native-interface