Browse Source

Add doc line to `core:mem/virtual`

gingerBill 5 days ago
parent
commit
940b0c54bc
1 changed files with 62 additions and 0 deletions
  1. 62 0
      core/mem/virtual/doc.odin

+ 62 - 0
core/mem/virtual/doc.odin

@@ -0,0 +1,62 @@
+/*
+package mem/virtual implements 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 virtual
+