以下简单的C代码分配大约1.6%的计算机内存,并在不到2秒的时间内完成
main()
{
int i=0;
char *array=malloc(64000000);
for(i=0;i<64000000;i++){array[i]=i%256;}
getchar();
}
如何在Perl中执行类似的操作? 以下Perl代码占用了我计算机内存的大约70%(我将其杀死)
my @array;
for(my $i=0;$i<64000000;$i++)
{
$array[$i]=1;
}
getc();
exit;
我如何在Perl中使用malloc?
答案 0 :(得分:3)
您分配了64,000,000 SV*
的数组。 (这已经是你在C程序中分配的大小的8倍。)然后你分配了64,000,000个标量。
my $s = "\0" x 64_000_000;
但我认为在内存中放两份。以下没有。
my $s;
{
open my $fh, '>', \$s;
seek($fh, 64_000_000-1, 0);
print $fh "\0";
}
答案 1 :(得分:1)
您正在看到语言之间可变大小的差异。
请参阅http://perlmaven.com/how-much-memory-do-perl-variables-use
这也很好地解释了内存使用情况:
http://search.cpan.org/~nwclark/Devel-Size-0.79/lib/Devel/Size.pm
简而言之,你的perl数组至少需要1536 MB的空间才能存储该数组。