1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

option to pre-allocate a memory block

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

View File

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