このコードはまったく割り当てられないはずですが、何らかの理由で割り当てられてしまいます。ベンチマークが示すように、操作ごとに 2 つの割り当てが発生します。
関数のどの行が割り当てられますか?なぜ?
###関数:### リーリー ###基準:### リーリー私は、
bufスライスがどういうわけかエスケープすると思いますが、私が理解しているように、この場合のスライスは変数を指すスタック上に割り当てられた構造体であるため、方法がわかりません
b をデータとして使用します。式 unsafe.Slice(&b, 1)
を (*[1]byte)(unsafe.Pointer(&b))[:]
に変更しようとしましたが、変更。 正解
は
io.Reader を使用し、Write
は io.Writer
を使用するため、buf
(これはこれら 2 つの関数に渡される bytes.Buffer
) はエスケープする必要があるということです。
これらの関数に具象型 bytes.Buffer
(おそらく望ましくない) を指定したとしても、
が io.ReadFull を呼び出すため、それだけでは十分ではありません。
、これも io.Reader
を受け取ります。この課題を免除してもらうには、それ以上に頑張らなければなりません。
補足として、Read
の他の問題には、
の悪ふざけを必要としない、より簡単な解決策があります。単に var b を変更するだけです。 byte
を var b [1]byte
(これは メモリ内の
とまったく同じです) に置き換え、b[:]
を ReadFull に渡します。 を使用し、他に b
が使用される場合は常に b[0]
を使用します。
以上が何がヒープに逃げ込むのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。