option to pre-allocate a memory block

pull/3060/head
Alexander Medvednikov 2019-12-11 18:41:25 +03:00
parent 13769f440f
commit 7dcd47369b
2 changed files with 22 additions and 8 deletions

View File

@ -4,6 +4,8 @@
module builtin
__global g_m2_ptr byteptr
fn init() {
$if windows {
if is_atty(0) > 0 {
@ -108,14 +110,27 @@ pub fn print(s string) {
}
}
__global total_m i64 = 0
//__global nr_mallocs int = 0
__global nr_mallocs int = 0
[unsafe_fn]
pub fn malloc(n int) byteptr {
if n < 0 {
panic('malloc(<0)')
}
//nr_mallocs++
$if debug {
res := g_m2_ptr
g_m2_ptr += n
nr_mallocs++
return res
} $else {
ptr := C.malloc(n)
if ptr == 0 {
panic('malloc($n) failed')
}
return ptr
}
/*
TODO
#ifdef VPLAY
@ -129,11 +144,6 @@ TODO
print_backtrace()
#endif
*/
ptr := C.malloc(n)
if ptr == 0 {
panic('malloc($n) failed')
}
return ptr
}
pub fn calloc(n int) byteptr {

View File

@ -199,7 +199,7 @@ pub fn (v mut V) compile() {
println(v.files)
}
v.add_v_files_to_compile()
if v.pref.is_verbose || v.pref.is_debug {
if v.pref.is_verbose {
println('all .v files:')
println(v.files)
}
@ -418,6 +418,10 @@ fn (v mut V) generate_init() {
// vlib can't have `init_consts()`
v.cgen.genln('void init() {
g_str_buf=malloc(1000);
#if VDEBUG
g_m2_ptr=malloc(50 * 1000 * 1000);
puts("allocated 50 mb");
#endif
$call_mod_init_consts
$consts_init_body
builtin__init();