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