elixir / erlang中IO列表的效率

时间:2017-03-16 12:54:41

标签: erlang elixir

我已经了解了IO列表的效率。但是我仍然无法绕过它。

  1. IO列表的嵌套与连接的效率如何 字符串。

  2. 当有大量重复词时,IO列表的确切效率如何。

  3. 我曾使用this链接作为参考。

1 个答案:

答案 0 :(得分:5)

免责声明:我将使用Erlang语法,因为即使在Elixir中它也是在BEAM VM中完成的。

  1. 如果您有两个长度为LMLN的{​​{1}}和M列表。然后附加NLM ++ LN操作。 O(M)[LM|LN]操作。如果您有两个二进制文件O(1)BM,那么BN<<BM/binary, BN/binary>>操作,O(M+N)(是的,它有效[BM|BN]。)仍然是io_list操作。

  2. 重复O(1)长度W,无论是列表还是二进制,使用W重复Nlists:duplicate(N, W)操作,它消耗O(N)额外的内存,即整个内存为O(N)。如果您要进行展平,则需要花费O(N+W)时间并消耗O(N*W)个内存。

  3. 示例:您可以使用此O(N*W)2^31列表(不要在shell中输入!):

    x

    并且它需要30次lists:foldl(fun(_, X) -> [X|X] end, "x", lists:seq(1, 30)). 操作时间并消耗31 * 2 * 8B,即496B内存(在64b平台上,一半在32b上)。如果你将它作为二进制文件,它将占用超过2GB的内存和32GB作为一个平面列表(在64b和32b上16GB)。祝你好运。