[erlang-questions] Fast binary reverse

Richard Carlsson carlsson.richard@REDACTED
Thu Oct 27 10:46:05 CEST 2011


On 10/27/2011 10:12 AM, Ward Bekker wrote:
> Hi,
>
> I want to reverse the bytes of a bitstring as fast as possible. There is
> not a erlang BIF that does this, so I googled some possible solutions:
>
> Fun1 = fun(B) -> S = size(B)*8,<<X:S/integer-little>>=B,
> <<X:S/integer-big>> end.
> Fun2 = fun(B) ->
> binary:list_to_bin(lists:reverse(binary:bin_to_list(B))) end.

If you wrote those funs in the shell, they will always be interpreted by 
erl_eval (not compiled to Beam code), which adds quite a lot of overhead 
for such a small benchmark. The quick work done by the built-in 
functions will be completely eclipsed by that overhead.

Note that funs in compiled code don't have much overhead - in that case 
it's comparable to an ordinary function call. But for funs written in 
the shell, you'll basically get a fun object that says "if someone calls 
me, then call erl_eval to interpret this here abstract syntax tree and 
return the result from the interpretation".

   /Richard



More information about the erlang-questions mailing list