Erlang二进制:这会导致副本吗?

在读取this document之后,我不确定以下代码是否会在内部生成A的运行时副本二进制文件。Erlang二进制:这会导致副本吗?

f(<<>>, A) -> 

A;

f(<<X:2/binary, R/binary>>, A) ->

I = binary_to_integer(X, 16),

f(R, <<A/binary, I>>).

我的猜测是“否”,因为A没有发送,也没有被解构。我是对的吗,还是我错过了什么?

回答:

由于没有共享子二进制文件,您的代码不会导致运行时复制A二进制文件。如果我们手动展开追加的操作顺序,它看起来像

A0 = <<A/binary, SomeByte>>, 

A1 = <<A0/binary, SomeByte1>>,

A2 = <<A1/binary, SomeByte2>>,

.....

An = <<An-1, SomeByteN>>.

所以我们只附加到从最新的追加操作,即所产生的二进制有一个单一的参考ProcBin这对A0创建(如效率文件中所述)。

回答:

为什么不使用bin_opt_info选项?

为您的代码:

[[email protected] bin_test]# erlc +bin_opt_info a.erl 

a.erl:8: Warning: OPTIMIZED: creation of sub binary delayed

对于代码https://gist.github.com/wardbekker/5673200

输出是:

[[email protected] bin_test]# erlc +bin_opt_info test.erl 

test.erl:14: Warning: OPTIMIZED: creation of sub binary delayed

[[email protected] bin_test]# erlc +bin_opt_info test2.erl

test2.erl:8: Warning: variable 'A' is unused

test2.erl:13: Warning: OPTIMIZED: creation of sub binary delayed

以上是 Erlang二进制:这会导致副本吗? 的全部内容, 来源链接: utcz.com/qa/258438.html

回到顶部