阅读本文档后,我不确定以下代码是否会在内部生成 A 的运行时复制二进制文件。
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 选项?
对于您的代码:
[root@nimbus bin_test]# erlc +bin_opt_info a.erl
a.erl:8: Warning: OPTIMIZED: creation of sub binary delayed
对于https://gist.github.com/wardbekker/5673200中的代码
输出是:
[root@nimbus bin_test]# erlc +bin_opt_info test.erl
test.erl:14: Warning: OPTIMIZED: creation of sub binary delayed
[root@nimbus 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