[erlang-questions] when any why to use improper lists

Dmitry Klionsky dm.klionsky@REDACTED
Fri Jun 29 10:16:23 CEST 2018


Some numbers

1> erts_debug:flat_size([a,b]).
4
2> erts_debug:flat_size({a,b}).
3
3> erts_debug:flat_size([a|b]).
2


On 06/29/2018 03:35 AM, Dmytro Lytovchenko wrote:
> A tuple of 2 elements will take 3 words of memory minimum
> http://beam-wisdoms.clau.se/en/latest/indepth-memory-layout.html#tuple-arityval-0
> tuple1 = [ headerWord, element1, element2 ]
>
> A cons cell has no header word, so an improper list of 1 element and 
> 2nd element as a tail, just 2 values stored side to side
> (same as normal list below except that only 1 cons cell is used, 2 words)
> cons1 = [ element1, element2 ]
>
> A proper list of 2 elements will take 2 cons cells, i.e. 4 words of 
> memory minimum
> cons2 = [ element2, [] ]
> cons1 = [ element1, cons2 ]
> http://beam-wisdoms.clau.se/en/latest/indepth-memory-layout.html#lists-cons
>
>
> 2018-06-29 2:23 GMT+02:00 Dmitry Belyaev <be.dmitry@REDACTED 
> <mailto:be.dmitry@REDACTED>>:
>
>     It's a way to reduce memory footprint.
>
>     Tuple of size N is roughly represented in memory as an array
>     [TupleTag, N, TupleElement1, TupleElement2, ..., TupleElementN].
>     Compare it to Cons cell representation: [ConsTag, HeadElement,
>     TailElement] - it saves 1 word per structure.
>
>     Kind regards,
>     Dmitry Belyaev
>
>     On Fri, Jun 29, 2018 at 9:50 AM, Karlo Kuna <kuna.prime@REDACTED
>     <mailto:kuna.prime@REDACTED>> wrote:
>
>         dealing with digraph module i have noticed use of improper
>         lists as representations of edges:
>         ['$e' | 123]
>
>         is there a good reason to use improper lists instead of tuple
>         for this and in general
>         when is a good idea to use improper lists?? (i can't think of
>         example for justified use)
>
>         _______________________________________________
>         erlang-questions mailing list
>         erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>         http://erlang.org/mailman/listinfo/erlang-questions
>         <http://erlang.org/mailman/listinfo/erlang-questions>
>
>
>
>     _______________________________________________
>     erlang-questions mailing list
>     erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>     http://erlang.org/mailman/listinfo/erlang-questions
>     <http://erlang.org/mailman/listinfo/erlang-questions>
>
>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions

-- 
BR,
Dmitry

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180629/b93dfa45/attachment.htm>


More information about the erlang-questions mailing list