<div dir="ltr">The key thing with atoms is that they are immediates. This means that the atom term it self takes zero heap memory in an Erlang process. <div><br><div>Atoms are extremely efficient. A matching '=:=' operation, the normal thing to do with atoms, only require a one word compare.</div>
<div><br></div><div>Atoms need to store the textual representation somewhere and this is where the table comes in. The immediate term is an reference to this representation. It is system wide shared to save memory of course.</div>
<div><br></div><div>When developer uses atoms as strings and not as "enums" they are still space efficient but will require lookups to the atom table. Not a huge deal but annoying.<br></div><div><br></div><div>To answer your question: Getting rid of the table and storing textual representation in heap memory will increase memory consumption dramatically. There are suggested comprises, one is <a href="https://github.com/erlang/eep/blob/master/eeps/eep-0020.md">https://github.com/erlang/eep/blob/master/eeps/eep-0020.md</a> for instance.</div>
<div><br></div><div>The one thing to remember: we want atoms to be *immediates* - it is an extremely important feature.</div><div><br></div><div>// Björn-Egil</div><div><div><br></div></div></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">2013/7/20 Pierre Fenoll <span dir="ltr"><<a href="mailto:pierrefenoll@gmail.com" target="_blank">pierrefenoll@gmail.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">Hi,<div><br></div><div>So, atoms are stored in a shared table, using locks to read & write, and never garbage-collected.</div><div>Well we know the issues that emerge from this.</div><div><br></div><div>


What I can't find on the Web is the purpose of this table.</div><div>Why does Erlang needs to assign a unique hash to a <255-characters string and put it in memory?</div><br>I thought atoms were just like enums, thus the only actions needed on them were ==, =:= and the various conversions to string or binary.<div>


An atom (approximately) corresponds to this regexp: [a-z'][a-zA-Z0-9_']{,254}.</div><div>Its syntactic representation **already** supports the actions I cited.</div><div><br></div><div>Why not get rid of the atom table and and just use strncmp(3)?</div>


<div><br></div><div>Cheers,</div><div>Pierre</div></div>
<br>_______________________________________________<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" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>