为什么Perl会按照这种模式重新分配内存?

Tim*_*Tim 5 memory perl interpreter

perl自然会重用匿名数组的内存地址.如此示例所示,它们在两个地址之间循环以获取空数组:

$ perl -E "say [] for (1..6)"
ARRAY(0x37b23c)
ARRAY(0x37b28c)
ARRAY(0x37b23c)
ARRAY(0x37b28c)
ARRAY(0x37b23c)
ARRAY(0x37b28c)
Run Code Online (Sandbox Code Playgroud)

我想出了为什么它不能立即重新分配内存的一些理论,当我发现循环并不总是两个地址长.以下示例的循环为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)
Run Code Online (Sandbox Code Playgroud)

是什么导致了内存管理的这种特性?

ike*_*ami 2

当 SV 被释放时,它们实际上被放入“空闲”池中。也许它们进入池的顺序会影响它们退出池的顺序。