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

标签 perl memory interpreter

匿名数组的内存地址自然会被 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)

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

最佳答案

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

关于perl - 为什么 Perl 会按照这种模式重新分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765112/

相关文章:

c++ - 如何在 mac 上编写 C++ 程序,在单独的文本文件中编译和运行 C++ 代码

operating-system - 解释型语言需要操作系统才能工作吗?

perl - 用于 pi 计算的 Perl 代码

perl - 如何将 @ARGV 的元素分配给 $variable,然后打印它?

javascript - JavaScript 中的巨大内存泄漏

c - 如果指针重定向,则释放内存

perl - linux中有类似lsof命令的perl函数吗?

regex - 将键和值从 Perl 正则表达式传递到哈希

android - 我必须删除 GLSurfaceView 中的纹理吗?

haskell - Haskell 中定义的 For 循环出现问题