<div dir="ltr">Data is stored in process heap most of the time.<div>As long as data is moved INSIDE the process, it is NOT COPIED, only a pointer is passed.</div><div>If the data ever leaves the process, a message for example, it will be COPIED to its new owner.</div><div>If the data is moved to or from ETS, it behaves similarly, it is COPIED (ETS has own heap separate from any process).</div><div>If the data is moved between a process and a port, it is COPIED (ports behave similar to processes, and own resources in a similar way)</div><div>Large binaries >64 bytes are NEVER copied, instead they are reference counted and reference is shared between processes. This is why you want to GC all processes which touched a large binary periodically, otherwise it may take a long time before the binary is freed.</div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-03-17 11:24 GMT+01:00 Xavier Noria <span dir="ltr"><<a href="mailto:fxn@hashref.com" target="_blank">fxn@hashref.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I would like to have a mental model for data copying in Erlang.<div><br></div><div>By that I mean immutability is in my view a property of an API, but I suppose the implementation, compiler optimizations, etc., can precisely leverage that property to reuse stuff behind the scenes for performance.<div><br></div><div>Would you recommend any particular article, talk, book, ..., that would help me get an idea of how that works in Erlang?</div><div><br></div></div></div>
<br>______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>