[erlang-questions] binary_part/3

Alex Alvarez alex@REDACTED
Mon Jan 8 21:04:08 CET 2018


Although I was not the original author of this thread, thanks Jesper
for clearing this and the background info!

Cheers,
Alex

On 1/8/2018 at 2:20 PM, "Jesper Louis Andersen"  wrote:A sub-binary is
a pointer into an already existing binary. It is, roughly, a triple of
a pointer to the original binary, an offset into the binary, and a
length (from that offset). They are quick to copy around, and they are
making efficient use of the fact that data in an Erlang system is
generally immutable.
However, the caveat is that a sub-binary can keep an underlying binary
"alive" for longer than it should. There are situations in which the
ERTS will convert a sub-binary into a copy with a new binary, and the
situation is slowly getting better and better. But if you want to be
sure, you need to add a binary:copy/1 to a binary to make it into a
full-blown (ref-counted) binary.
In the example Alex writes, the f(A) in (3) merely forgets the
ref-counted binary pointer. But the binary in (2) and (4) keeps it
alive in the system.

On Mon, Jan 8, 2018 at 8:09 PM Frank Muller  wrote:
OTP team,
Anyone can shed some light on this please?
/Frank
Okay, maybe I'm totally confused here, but is it a pointer to the
original binary or a new binary?  Looking at the source code it seems
to build/make a new binary at the end of erts_gc_binary_part().  And
from the shell...

1> A = .

2> B = erlang:binary_part(A, 0, 8).

3> f(A).
ok
4> B.
A is gone and we still have B.  Does Erlang actually returns
references?

Cheers,
Alex

On 1/7/2018 at 1:21 PM, "Frank Muller"  wrote:Thank you Roger!!!
It's a sub-binary:
 https://github.com/erlang/otp/blob/master/erts/emulator/beam/erl_bif_binary.c#L1915-L1924
 On 6 January 2018 at 21:38, Frank Muller  wrote:
 > Hi Everyone
 >
 > Is the binary returned when calling binary_part/3:
 > 1.  a sub-binary pointing to the original one
 > 2. or a new binary
 >
 > Thank you.
 > Frank
 >
 > _______________________________________________
 > erlang-questions mailing list
 > erlang-questions@REDACTED
 > http://erlang.org/mailman/listinfo/erlang-questions
 >
  _______________________________________________
 erlang-questions mailing list
 erlang-questions@REDACTED
 http://erlang.org/mailman/listinfo/erlang-questions
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180108/4c4459cf/attachment.htm>


More information about the erlang-questions mailing list