2

undef $xとは異なり$x = undefます。ガベージコレクションとメモリの解放の両方がトリガーされるという印象を受けましたが、そうで$x = undefはないようです。

これは言語のバグですか?やって$x = undef、それはメモリを解放するべきではありませんか?

4

1 に答える 1

7

いいえ、いいえ。Perl は、再度必要になる可能性のあるメモリを解放しないことで、メモリの使用量よりも速度を優先します。文字列バッファの割り当てを解除する場合は、 を使用しますundef $x;

$ perl -MDevel::Peek -e'
   Dump($x);
   $x='abc'; Dump($x);
   $x=undef; Dump($x);
   undef $x; Dump($x);
'
SV = NULL(0x0) at 0x1c39284       <-- No body allocated
  REFCNT = 1
  FLAGS = ()                      <-- Undefined
SV = PV(0x3e8d54) at 0x1c39284    <-- PV body allocated
  REFCNT = 1
  FLAGS = (POK,pPOK)              <-- Contains a string
  PV = 0x3eae7c "abc"\0
  CUR = 3
  LEN = 12
SV = PV(0x3e8d54) at 0x1c39284    <-- PV body allocated
  REFCNT = 1
  FLAGS = ()                      <-- Undefined
  PV = 0x3eae7c "abc"\0           <-- Currently unused string buffer
  CUR = 3
  LEN = 12
SV = PV(0x3e8d54) at 0x1c39284    <-- PV body allocated
  REFCNT = 1
  FLAGS = ()                      <-- Undefined
  PV = 0                          <-- No string buffer allocated
于 2013-03-12T19:31:51.027 に答える