Perl内存分配

时间:2014-08-07 19:13:21

标签: perl malloc

以下简单的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?

2 个答案:

答案 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的空间才能存储该数组。