When v is compiled as. wasm, does it use GC or autofree memory management by default? #19212
-
When compiling v into a wasm executable file using the command
|
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
@l1mey112 ☝️ |
Beta Was this translation helpful? Give feedback.
-
Currently it uses neither. Just a simple bump allocator able to allocate at possibly at most 64KiBs without crashing. This was a basic allocator created for running the tests and all programs the wasm backend is capable of compiling. Full code behind @[has_globals]
module builtin
// Shitty `sbrk` basic `malloc` and `free` impl
// TODO: implement pure V `walloc` later
__global g_heap_base = usize(vwasm_heap_base())
// malloc dynamically allocates a `n` bytes block of memory on the heap.
// malloc returns a `byteptr` pointing to the memory address of the allocated space.
// unlike the `calloc` family of functions - malloc will not zero the memory block.
@[unsafe]
pub fn malloc(n isize) &u8 {
if n <= 0 {
panic('malloc(n <= 0)')
}
res := g_heap_base
g_heap_base += usize(n)
return &u8(res)
}
// free allows for manually freeing memory allocated at the address `ptr`.
// currently does not free any memory.
@[unsafe]
pub fn free(ptr voidptr) {
_ := ptr
} |
Beta Was this translation helpful? Give feedback.
Currently it uses neither. Just a simple bump allocator able to allocate at possibly at most 64KiBs without crashing. This was a basic allocator created for running the tests and all programs the wasm backend is capable of compiling.
Full code behind
vlib/builtin/wasm/alloc.v
: