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 に答える