分配零長度緩衝區通常取決於實現。
我知道malloc(0)
返回NULL或可以安全釋放的指針,這完全取決於實現。什麼將java.nio.ByteBuffer.allocateDirect(0)導致內存?
然後,當調用ByteBuffer.allocateDirect(0)
時會發生什麼?
(我的意思是,在內存中會發生什麼?)
這個函數會分配像libc malloc()那樣的一小塊內存嗎?
分配零長度緩衝區通常取決於實現。
我知道malloc(0)
返回NULL或可以安全釋放的指針,這完全取決於實現。什麼將java.nio.ByteBuffer.allocateDirect(0)導致內存?
然後,當調用ByteBuffer.allocateDirect(0)
時會發生什麼?
(我的意思是,在內存中會發生什麼?)
這個函數會分配像libc malloc()那樣的一小塊內存嗎?
是的,作爲ByteBuffer.allocateDirect(int capacity)
返回new DirectByteBuffer(capacity)
並且其中 「PA」是VM.isDirectMemoryPageAligned()
和「PS」是頁大小DirectByteBuffer(int capacity)
構造分配大小Math.max(1L, (long)capacity + (pa ? ps : 0));
的存儲器中。您可以按照#110 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/nio/DirectByteBuffer.java#110
因此,ByteBuffer.allocateDirect(0)
創建的內存大小至少爲1.