mirror of
https://github.com/vlang/v.git
synced 2025-08-03 09:47:15 -04:00
39 lines
1.0 KiB
V
39 lines
1.0 KiB
V
module runtime
|
|
|
|
fn C.sysctlnametomib(name charptr, mib &int, len &usize) int
|
|
|
|
fn free_memory_impl() !usize {
|
|
$if cross ? {
|
|
return error('free_memory: not implemented')
|
|
}
|
|
$if !cross ? {
|
|
$if freebsd {
|
|
page_size := usize(C.sysconf(C._SC_PAGESIZE))
|
|
c_errno_1 := C.errno
|
|
if page_size == usize(-1) {
|
|
return error('free_memory: `C.sysconf()` return error code = ${c_errno_1}')
|
|
}
|
|
mut mib := [4]int{}
|
|
mut len := usize(4)
|
|
retval_2 := unsafe {
|
|
C.sysctlnametomib(c'vm.stats.vm.v_free_count', &mib[0], &len)
|
|
}
|
|
c_errno_2 := C.errno
|
|
if retval_2 == -1 {
|
|
return error('free_memory: `C.sysctlnametomib()` return error code = ${c_errno_2}')
|
|
}
|
|
mut free_pages := int(0)
|
|
bufsize := usize(4)
|
|
retval_3 := unsafe {
|
|
C.sysctl(&mib[0], mib.len, &free_pages, &bufsize, 0, 0)
|
|
}
|
|
c_errno_3 := C.errno
|
|
if retval_3 == -1 {
|
|
return error('free_memory: `C.sysctl()` return error code = ${c_errno_3}')
|
|
}
|
|
return page_size * usize(free_pages)
|
|
}
|
|
}
|
|
return error('free_memory: not implemented')
|
|
}
|