【发布时间】:2011-09-20 09:48:15
【问题描述】:
当我运行以下脚本时:
my @arr = [1..5000000];
for($i=0; $i<5000000; $i++) {
$arr[$i] = $i;
if($i % 1000000 == 0) {
print "$i\n";
}
}
它消耗大约 500 MB 内存。习惯于更高级别的编译语言,我预计它大约为 5M * 4B = 20MB(每个数字 4 个字节)。
我猜这是因为每个值都是标量,而不是简单的二进制数。是否可以通过将这些值视为数字来减少内存占用,或者是 500 MB 用于此任务的唯一方法?
【问题讨论】:
-
部分问题在于
my @arr = [1..5000000];是一个错误,并没有按照您的意愿行事。如果你写了my @arr = (1..5000000);,你可能会看到更少的使用。或者只是my @arr;,因为你没有使用任何你初始化的值。 -
@hobbs - 我做了一个最简单的例子。我的真实脚本确实使用了数组。