[erlang-questions] Preallocated binary — save memory

Anthony Ramine n.oxyde@REDACTED
Thu Apr 11 09:52:29 CEST 2013


Hello Max.

I put together some BEAM assembly to write a function that just use bs_init_writable. Do you have any idea which size the initial buffer should be in your code? Could you try using prealloc_bin:new/1[1] and see if it improve things?

	https://gist.github.com/nox/5359459/raw/0b8615/prealloc_bin.S

Regards,

-- 
Anthony Ramine

Le 10 avr. 2013 à 22:50, Max Lapshin a écrit :

> I've looked at erlc -S bc.erl:
> 
> {function, bc, 1, 2}.
>   {label,1}.
>     {line,[{location,"bc.erl",3}]}.
>     {func_info,{atom,bc},{atom,bc},1}.
>   {label,2}.
>     {allocate_zero,1,1}.
>     {line,[{location,"bc.erl",3}]}.
>     {gc_bif,bit_size,{f,0},1,[{x,0}],{x,1}}.
>     {line,[]}.
>     {gc_bif,'div',{f,0},2,[{x,1},{integer,336}],{x,1}}.
>     {line,[]}.
>     {gc_bif,'*',{f,0},2,[{x,1},{integer,45}],{x,1}}.
>     {move,{x,0},{y,0}}.
>     {move,{x,1},{x,0}}.
>     bs_init_writable.
>     {move,{x,0},{x,1}}.
>     {move,{y,0},{x,0}}.
>     {call_last,2,{f,8},1}.
> 
> 
> 
> It is really cool!  Erlang understands that resulting binary will be exactly 45 * (size(Input) div 42) bytes and preallocates it.
> This is a very important reason to use list and binary comprehensions.
> 
> 




More information about the erlang-questions mailing list