java jni unsafe

java - Uso de memoria asignada por sun.misc.Unsafe.allocateMemory() en código nativo



jni (1)

Estoy tratando de asignar memoria usando sun.misc.Unsafe.allocateMemory () y acceder a ella en código nativo.

sin embargo, parece que el valor largo devuelto por allocateMemory no funciona como la dirección correcta en el código C.

Unsafe unsafe = getUnsafe(); long address = unsafe.allocateMemory(64); for (int i = 0; i < 64; i += 8) unsafe.putByte(memory + i, (byte) 0xFF); nativeMethod(address);

Sin embargo, en mi código nativo cuando intento acceder a ''dirección'' como un puntero, no funciona :(

Actualización: adjunté una imagen que muestra el problema. Pasé la ''dirección'' al código nativo, sin embargo, examinar la memoria en esa ubicación no muestra los valores 0xFF que puse allí.

Imagen: http://i.stack.imgur.com/KoIYG.png


¡Creo que está funcionando perfectamente bien! Su ciclo "para" establece cada octavo byte a 0xff , y si mira de cerca la pantalla y cuenta, verá que cada octavo byte es 0xff . Hay algunos otros valores aleatorios allí porque no es Unsafe. allocateMemory() Unsafe. allocateMemory() no devuelve la memoria puesta a cero; devuelve una memoria no inicializada, como el malloc() de C malloc() .

Si cambió ese "i + = 8" a solo "i ++", entonces cada byte sería 0xff ; Valdría la pena hacer ese experimento para probarse a sí mismo que está funcionando.