Authors: | Zahary Karadjov |
---|
This module provides utilities for reserving a portions of the address space of a program without consuming physical memory. It can be used to implement a dynamically resizable buffer that is guaranteed to remain in the same memory location. The buffer will be able to grow up to the size of the initially reserved portion of the address space.
Unstable API.
Types
MemAccessFlags = int
- Source Edit
ReservedMem = object memStart: pointer usedMemEnd: pointer committedMemEnd: pointer memEnd: pointer maxCommittedAndUnusedPages: int accessFlags: MemAccessFlags
- Source Edit
ReservedMemSeq[T] = object mem: ReservedMem
- Source Edit
Lets
memExec = MemAccessFlags(4'i32)
- Source Edit
memExecRead = MemAccessFlags(5'i32)
- Source Edit
memExecReadWrite = MemAccessFlags(7'i32)
- Source Edit
memRead = MemAccessFlags(1'i32)
- Source Edit
memReadWrite = MemAccessFlags(3'i32)
- Source Edit
Procs
proc init(T: type ReservedMem; maxLen: Natural; initLen: Natural = 0; initCommitLen = initLen; memStart = pointer(nil); accessFlags = memReadWrite; maxCommittedAndUnusedPages = 3): ReservedMem
- Source Edit
proc setLen(m: var ReservedMem; newLen: int) {...}{.raises: [OSError], tags: [].}
- Source Edit
proc init(SeqType: type ReservedMemSeq; maxLen: Natural; initLen: Natural = 0; initCommitLen: Natural = 0; memStart = pointer(nil); accessFlags = memReadWrite; maxCommittedAndUnusedPages = 3): SeqType:type
- Source Edit
proc setLen[T](s: var ReservedMemSeq[T]; newLen: int)
- Source Edit
proc add[T](s: var ReservedMemSeq[T]; val: T)
- Source Edit
proc pop[T](s: var ReservedMemSeq[T]): T
- Source Edit
Funcs
func len(m: ReservedMem): int {...}{.raises: [], tags: [].}
- Source Edit
func commitedLen(m: ReservedMem): int {...}{.raises: [], tags: [].}
- Source Edit
func maxLen(m: ReservedMem): int {...}{.raises: [], tags: [].}
- Source Edit
func `[]`[T](s: ReservedMemSeq[T]; pos: Natural): lent T
- Source Edit
func `[]`[T](s: var ReservedMemSeq[T]; pos: Natural): var T
- Source Edit
func `[]`[T](s: ReservedMemSeq[T]; rpos: BackwardsIndex): lent T
- Source Edit
func `[]`[T](s: var ReservedMemSeq[T]; rpos: BackwardsIndex): var T
- Source Edit
func len[T](s: ReservedMemSeq[T]): int
- Source Edit
func commitedLen[T](s: ReservedMemSeq[T]): int
- Source Edit
func maxLen[T](s: ReservedMemSeq[T]): int
- Source Edit