阅读this document后,我不确定以下代码是否会在内部生成A的运行时副本二进制文件。
f(<<>>, A) ->
A;
f(<<X:2/binary, R/binary>>, A) ->
I = binary_to_integer(X, 16),
f(R, <<A/binary, I>>).
我的猜测是“不”,因为A没有被发送也没有被解构。我是对的,还是我错过了什么?
答案 0 :(得分:4)
您的代码不会导致A
二进制文件的运行时复制,因为不会共享子二进制文件。如果我们手动展开追加操作序列,它看起来像
A0 = <<A/binary, SomeByte>>,
A1 = <<A0/binary, SomeByte1>>,
A2 = <<A1/binary, SomeByte2>>,
.....
An = <<An-1, SomeByteN>>.
因此,我们只附加了最新追加操作产生的二进制文件,即只有对A0
创建的ProcBin的引用(如效率文档中所述)。
答案 1 :(得分:0)
为什么不使用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