3

画像処理アプリケーションを高速化するために、0 から始まるインデックスを使用して、配列内の値を中央からアドレス指定しようとしています。

たとえば、2 つの配列を使用する場合、次のような状況になることがよくあります。

public void work(int[] array1, int[] array2, int offset)
{
    int len = array1.length;
    for (int i = 0; i < len; i++)
        array1[i] += array2[i + offset];
}

したがって、array2 (コピーではなく) の中央に直接マップする新しい変数 array3 を作成したいので、これを行うことができます。

public void work(int[] array1, int[] array2, int offset)
{
    int[] array3 = array2[offset]...;
    int len = array1.length;
    for (int i = 0; i < len; i++)
        array1[i] += array3[i];
}

実際には、次の c ステートメントに相当する Java が必要です。

int *array3ptr = array2ptr + offset;

注:私はJNIなどの経験がないので、これを使用することに要約される場合は、実際の例を提供してください。

4

3 に答える 3

1

これは、純粋な Java 配列とarray[index]表記法を使用して行うことはできません。Java 配列では、重複することはありません

ただし、配列を でラップすることはできますIntBufferダイレクト バッファ(「参考文献」を参照)を使用すると、非常allocateDirectに優れたパフォーマンスが得られるはずです。

などの発言

int *array3ptr = array2ptr + offset;

のように書かれます

IntBuffer array3 = array2.slice().position(offset);

これらは

于 2012-05-14T08:56:08.870 に答える
0

Java では、整数配列でさえヒープ上のオブジェクトです。したがって、int[] array2 は、実際にはメモリ内の整数配列を直接参照しています。オブジェクト (つまり配列) のコピーは作成されず、複製は配列への参照のみです。

于 2012-05-14T08:59:19.140 に答える
0

私はそれらの経験はあまりありませんが、配列 (およびサブ配列) をIntBufferインスタンスにラップすることでそれを行うことができると思います。

于 2012-05-14T09:01:29.247 に答える