2

阅读本文档后,我不确定以下代码是否会在内部生成 A 的运行时复制二进制文件。

f(<<>>, A) ->
    A;
f(<<X:2/binary, R/binary>>, A) ->
    I = binary_to_integer(X, 16),
    f(R, <<A/binary, I>>).

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

4

2 回答 2

4

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

A0 = <<A/binary, SomeByte>>,
A1 = <<A0/binary, SomeByte1>>,
A2 = <<A1/binary, SomeByte2>>,
 .....
An = <<An-1, SomeByteN>>.

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

于 2013-05-29T19:22:05.567 回答
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
于 2014-02-28T06:30:15.707 回答