Почему Perl перераспределяет память по этому шаблону?

Адреса памяти для анонимных массивов естественно повторно используются на perl. Как видно из этого примера, они циркулируют между двумя адресами для пустых массивов:

$ perl -E "say [] for (1..6)"
ARRAY(0x37b23c)
ARRAY(0x37b28c)
ARRAY(0x37b23c)
ARRAY(0x37b28c)
ARRAY(0x37b23c)
ARRAY(0x37b28c)

Я придумал несколько теорий о том, почему он не может сразу перераспределить память, когда обнаружил, что цикл не всегда длиннее двух адресов. Следующими примерами являются циклы 3 и 4.

$ perl -E "say [0] for (1..6)"
ARRAY(0x39b23c)
ARRAY(0x39b2ac)
ARRAY(0x39b28c)
ARRAY(0x39b23c)
ARRAY(0x39b2ac)
ARRAY(0x39b28c)

$ perl -E "say [0,0] for (1..6)"
ARRAY(0x64b23c)
ARRAY(0x64b2cc)
ARRAY(0x64b2ac)
ARRAY(0x64b28c)
ARRAY(0x64b23c)
ARRAY(0x64b2cc)

Откуда такая особенность управления памятью?

5
задан Tim 23 April 2011 в 20:11
поделиться