1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /*
- A platform agnostic way to reserve/commit/decommit virtual memory.
- virtual.Arena usage
- Example:
- // Source: https://github.com/odin-lang/examples/blob/master/arena_allocator/arena_allocator.odin
- import "core:fmt"
- import "core:os"
- // virtual package implements a multi-purpose arena allocator. If you are on a
- // platform that does not support virtual memory, then there is also a similar
- // arena in `core:mem`.
- import vmem "core:mem/virtual"
- load_files :: proc() -> ([]string, vmem.Arena) {
- // This creates a growing virtual memory arena. It uses virtual memory and
- // can grow as things are added to it.
- arena: vmem.Arena
- arena_err := vmem.arena_init_growing(&arena)
- ensure(arena_err == nil)
- arena_alloc := vmem.arena_allocator(&arena)
- // See arena_init_static for an arena that uses virtual memory, but cannot grow.
- // See arena_init_buffer for an arena that does not use virtual memory,
- // instead it relies on you feeding it a buffer.
- f1, f1_ok := os.read_entire_file("file1.txt", arena_alloc)
- ensure(f1_ok)
- f2, f2_ok := os.read_entire_file("file2.txt", arena_alloc)
- ensure(f2_ok)
- f3, f3_ok := os.read_entire_file("file3.txt", arena_alloc)
- ensure(f3_ok)
- res := make([]string, 3, arena_alloc)
- res[0] = string(f1)
- res[1] = string(f2)
- res[2] = string(f3)
- return res, arena
- }
- main :: proc() {
- files, arena := load_files()
- for f in files {
- fmt.println(f)
- }
- // This deallocates everything that was allocated on the arena:
- // The loaded content of the files as well as the `files` slice.
- vmem.arena_destroy(&arena)
- }
- */
- package mem_virtual
|