使用本机代码中sun.misc.Unsafe.allocateMemory()分配的内存

时间:2012-02-17 05:34:43

标签: java java-native-interface unsafe

我正在尝试使用sun.misc.Unsafe.allocateMemory()分配内存,并以本机代码访问它。

但是,似乎allocateMemory返回的long值在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);

但是在我的本机代码中,当我尝试将“地址”作为指针访问时,它不起作用:(

更新:我附上了一张显示问题的图片。 我将'地址'传递给本机代码,然而,检​​查该位置的内存并没有显示我放在那里的0xFF值。

图片: http://i.stack.imgur.com/KoIYG.png

enter image description here

1 个答案:

答案 0 :(得分:11)

我觉得它工作得很好!您的“for”循环将每八个字节设置为0xff,如果仔细查看显示和计数,您会看到每隔八个字节 0xff。其中还有一些其他随机值,因为Unsafe. allocateMemory()不会返回归零内存;它返回未初始化的内存,就像C的malloc()

如果您将“i + = 8”更改为“i ++”,那么每个字节将为0xff;值得做那个实验来向自己证明它正在发挥作用。