Class RPMallocConfig
- java.lang.Object
-
- org.lwjgl.system.Pointer.Default
-
- org.lwjgl.system.Struct
-
- org.lwjgl.system.rpmalloc.RPMallocConfig
-
- All Implemented Interfaces:
java.lang.AutoCloseable
,org.lwjgl.system.NativeResource
,org.lwjgl.system.Pointer
public class RPMallocConfig extends org.lwjgl.system.Struct implements org.lwjgl.system.NativeResource
This struct enables configuration of a memory mapper providing map/unmap of memory pages. Defaults toVirtualAlloc
/mmap
if none provided. This allows rpmalloc to be used in contexts where memory is provided by internal means.Page size may be set explicitly in initialization. This allows the allocator to be used as a sub-allocator where the page granularity should be lower to reduce risk of wasting unused memory ranges.
If rpmalloc is built with
ENABLE_GUARDS
,memory_overwrite
may be set to detect writes before or after allocated memory blocks. This is not enabled in the default LWJGL build.Member documentation
memory_map
– the memory map callback functionmemory_unmap
– the memory unmap callback functionpage_size
– the size of memory pages.The page size MUST be a power of two in
[512,16384]
range (29 to 214) unless 0 - set to 0 to use system page size. All memory mapping requests tomemory_map
will be made with size set to a multiple of the page size.Used if
RPMALLOC_CONFIGURABLE
is defined to 1, otherwise system page size is used.span_size
– size of a span of memory blocks.MUST be a power of two, and in
[4096,262144]
range (unless 0 - set to 0 to use the default span size).Used if
RPMALLOC_CONFIGURABLE
is defined to 1.span_map_count
– number of spans to map at each request to map new virtual memory blocks.This can be used to minimize the system call overhead at the cost of virtual memory address space. The extra mapped pages will not be written until actually used, so physical committed memory should not be affected in the default implementation.
Will be aligned to a multiple of spans that match memory page size in case of huge pages.
enable_huge_pages
– enable use of large/huge pages.If this flag is set to non-zero and page size is zero, the allocator will try to enable huge pages and auto detect the configuration. If this is set to non-zero and page_size is also non-zero, the allocator will assume huge pages have been configured and enabled prior to initializing the allocator.
For Windows, see large-page-support. For Linux, see hugetlbpage.txt.
Layout
struct rpmalloc_config_t { void * (*
memory_map
) (size_t size, size_t *offset); void (*memory_unmap
) (void *address, size_t size, size_t offset, int release); size_t page_size; size_t span_size; size_t span_map_count; int enable_huge_pages; }
-
-
Field Summary
Fields Modifier and Type Field Description static int
ALIGNOF
The struct alignment in bytes.static int
ENABLE_HUGE_PAGES
MEMORY_MAP
MEMORY_UNMAP
PAGE_SIZEThe struct member offsets.static int
SIZEOF
The struct size in bytes.static int
SPAN_MAP_COUNT
SPAN_SIZEThe struct member offsets.
-
Constructor Summary
Constructors Constructor Description RPMallocConfig(java.nio.ByteBuffer container)
Creates aRPMallocConfig
instance at the current position of the specifiedByteBuffer
container.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static RPMallocConfig
calloc()
Returns a newRPMallocConfig
instance allocated withmemCalloc
.static RPMallocConfig
callocStack()
Returns a newRPMallocConfig
instance allocated on the thread-localMemoryStack
and initializes all its bits to zero.static RPMallocConfig
callocStack(org.lwjgl.system.MemoryStack stack)
Returns a newRPMallocConfig
instance allocated on the specifiedMemoryStack
and initializes all its bits to zero.static RPMallocConfig
create()
Returns a newRPMallocConfig
instance allocated withBufferUtils
.static RPMallocConfig
create(long address)
Returns a newRPMallocConfig
instance for the specified memory address.static RPMallocConfig
createSafe(long address)
boolean
enable_huge_pages()
Returns the value of theenable_huge_pages
field.RPMallocConfig
enable_huge_pages(boolean value)
Sets the specified value to theenable_huge_pages
field.static RPMallocConfig
malloc()
Returns a newRPMallocConfig
instance allocated withmemAlloc
.static RPMallocConfig
mallocStack()
Returns a newRPMallocConfig
instance allocated on the thread-localMemoryStack
.static RPMallocConfig
mallocStack(org.lwjgl.system.MemoryStack stack)
Returns a newRPMallocConfig
instance allocated on the specifiedMemoryStack
.RPMemoryMapCallback
memory_map()
Returns the value of thememory_map
field.RPMallocConfig
memory_map(RPMemoryMapCallbackI value)
Sets the specified value to thememory_map
field.RPMemoryUnmapCallback
memory_unmap()
Returns the value of thememory_unmap
field.RPMallocConfig
memory_unmap(RPMemoryUnmapCallbackI value)
Sets the specified value to thememory_unmap
field.static int
nenable_huge_pages(long struct)
Unsafe version ofenable_huge_pages()
.static void
nenable_huge_pages(long struct, int value)
Unsafe version ofenable_huge_pages
.static RPMemoryMapCallback
nmemory_map(long struct)
Unsafe version ofmemory_map()
.static void
nmemory_map(long struct, RPMemoryMapCallbackI value)
Unsafe version ofmemory_map
.static RPMemoryUnmapCallback
nmemory_unmap(long struct)
Unsafe version ofmemory_unmap()
.static void
nmemory_unmap(long struct, RPMemoryUnmapCallbackI value)
Unsafe version ofmemory_unmap
.static long
npage_size(long struct)
Unsafe version ofpage_size()
.static void
npage_size(long struct, long value)
Unsafe version ofpage_size
.static long
nspan_map_count(long struct)
Unsafe version ofspan_map_count()
.static void
nspan_map_count(long struct, long value)
Unsafe version ofspan_map_count
.static long
nspan_size(long struct)
Unsafe version ofspan_size()
.static void
nspan_size(long struct, long value)
Unsafe version ofspan_size
.long
page_size()
Returns the value of thepage_size
field.RPMallocConfig
page_size(long value)
Sets the specified value to thepage_size
field.RPMallocConfig
set(RPMallocConfig src)
Copies the specified struct data to this struct.RPMallocConfig
set(RPMemoryMapCallbackI memory_map, RPMemoryUnmapCallbackI memory_unmap, long page_size, long span_size, long span_map_count, boolean enable_huge_pages)
Initializes this struct with the specified values.int
sizeof()
long
span_map_count()
Returns the value of thespan_map_count
field.RPMallocConfig
span_map_count(long value)
Sets the specified value to thespan_map_count
field.long
span_size()
Returns the value of thespan_size
field.RPMallocConfig
span_size(long value)
Sets the specified value to thespan_size
field.
-
-
-
Constructor Detail
-
RPMallocConfig
public RPMallocConfig(java.nio.ByteBuffer container)
Creates aRPMallocConfig
instance at the current position of the specifiedByteBuffer
container. Changes to the buffer's content will be visible to the struct instance and vice versa.The created instance holds a strong reference to the container object.
-
-
Method Detail
-
sizeof
public int sizeof()
- Specified by:
sizeof
in classorg.lwjgl.system.Struct
-
memory_map
@Nullable public RPMemoryMapCallback memory_map()
Returns the value of thememory_map
field.
-
memory_unmap
@Nullable public RPMemoryUnmapCallback memory_unmap()
Returns the value of thememory_unmap
field.
-
page_size
public long page_size()
Returns the value of thepage_size
field.
-
span_size
public long span_size()
Returns the value of thespan_size
field.
-
span_map_count
public long span_map_count()
Returns the value of thespan_map_count
field.
-
enable_huge_pages
public boolean enable_huge_pages()
Returns the value of theenable_huge_pages
field.
-
memory_map
public RPMallocConfig memory_map(@Nullable RPMemoryMapCallbackI value)
Sets the specified value to thememory_map
field.
-
memory_unmap
public RPMallocConfig memory_unmap(@Nullable RPMemoryUnmapCallbackI value)
Sets the specified value to thememory_unmap
field.
-
page_size
public RPMallocConfig page_size(long value)
Sets the specified value to thepage_size
field.
-
span_size
public RPMallocConfig span_size(long value)
Sets the specified value to thespan_size
field.
-
span_map_count
public RPMallocConfig span_map_count(long value)
Sets the specified value to thespan_map_count
field.
-
enable_huge_pages
public RPMallocConfig enable_huge_pages(boolean value)
Sets the specified value to theenable_huge_pages
field.
-
set
public RPMallocConfig set(RPMemoryMapCallbackI memory_map, RPMemoryUnmapCallbackI memory_unmap, long page_size, long span_size, long span_map_count, boolean enable_huge_pages)
Initializes this struct with the specified values.
-
set
public RPMallocConfig set(RPMallocConfig src)
Copies the specified struct data to this struct.- Parameters:
src
- the source struct- Returns:
- this struct
-
malloc
public static RPMallocConfig malloc()
Returns a newRPMallocConfig
instance allocated withmemAlloc
. The instance must be explicitly freed.
-
calloc
public static RPMallocConfig calloc()
Returns a newRPMallocConfig
instance allocated withmemCalloc
. The instance must be explicitly freed.
-
create
public static RPMallocConfig create()
Returns a newRPMallocConfig
instance allocated withBufferUtils
.
-
create
public static RPMallocConfig create(long address)
Returns a newRPMallocConfig
instance for the specified memory address.
-
createSafe
@Nullable public static RPMallocConfig createSafe(long address)
-
mallocStack
public static RPMallocConfig mallocStack()
Returns a newRPMallocConfig
instance allocated on the thread-localMemoryStack
.
-
callocStack
public static RPMallocConfig callocStack()
Returns a newRPMallocConfig
instance allocated on the thread-localMemoryStack
and initializes all its bits to zero.
-
mallocStack
public static RPMallocConfig mallocStack(org.lwjgl.system.MemoryStack stack)
Returns a newRPMallocConfig
instance allocated on the specifiedMemoryStack
.- Parameters:
stack
- the stack from which to allocate
-
callocStack
public static RPMallocConfig callocStack(org.lwjgl.system.MemoryStack stack)
Returns a newRPMallocConfig
instance allocated on the specifiedMemoryStack
and initializes all its bits to zero.- Parameters:
stack
- the stack from which to allocate
-
nmemory_map
@Nullable public static RPMemoryMapCallback nmemory_map(long struct)
Unsafe version ofmemory_map()
.
-
nmemory_unmap
@Nullable public static RPMemoryUnmapCallback nmemory_unmap(long struct)
Unsafe version ofmemory_unmap()
.
-
npage_size
public static long npage_size(long struct)
Unsafe version ofpage_size()
.
-
nspan_size
public static long nspan_size(long struct)
Unsafe version ofspan_size()
.
-
nspan_map_count
public static long nspan_map_count(long struct)
Unsafe version ofspan_map_count()
.
-
nenable_huge_pages
public static int nenable_huge_pages(long struct)
Unsafe version ofenable_huge_pages()
.
-
nmemory_map
public static void nmemory_map(long struct, @Nullable RPMemoryMapCallbackI value)
Unsafe version ofmemory_map
.
-
nmemory_unmap
public static void nmemory_unmap(long struct, @Nullable RPMemoryUnmapCallbackI value)
Unsafe version ofmemory_unmap
.
-
npage_size
public static void npage_size(long struct, long value)
Unsafe version ofpage_size
.
-
nspan_size
public static void nspan_size(long struct, long value)
Unsafe version ofspan_size
.
-
nspan_map_count
public static void nspan_map_count(long struct, long value)
Unsafe version ofspan_map_count
.
-
nenable_huge_pages
public static void nenable_huge_pages(long struct, int value)
Unsafe version ofenable_huge_pages
.
-
-