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í.
¡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.