相关疑难解决方法(0)

perl - 使用太多内存的整数数组?

当我运行以下脚本时:

my @arr = [1..5000000];

for($i=0; $i<5000000; $i++) {
        $arr[$i] = $i;
        if($i % 1000000 == 0) {
                print "$i\n";
        }
}
Run Code Online (Sandbox Code Playgroud)

它消耗大约500 MB的内存.用于高级编译语言我希望它大约是5M*4B = 20MB(每个数字4个字节).

我猜这是因为每个值都是标量,而不是简单的二进制数.是否可以通过将这些值视为数字来减少内存占用,或者只有500 MB才能完成此任务?

perl types

7
推荐指数
1
解决办法
2633
查看次数

Perl中的二维数组访问

试着学习Perl.我有一个填充了城市的阵列.我想通过引用子例程传递数组并打印每个城市输出.但是我有以下问题:

1)我可以在子例程中的while循环之前访问每个元素.但我无法访问while循环中的元素.我收到错误消息:

...
Use of uninitialized value in print at <filename> line 44, <GEN2> line 997 (#1)
Use of uninitialized value in print at <filename> line 44, <GEN2> line 998 (#1)
...
Run Code Online (Sandbox Code Playgroud)

以下是代码.我评论了什么打印和什么不打印(我试图删除我的解释不需要的代码......):

@cities;

#Assume cities is loaded successfully
&loadCities(getFileHandle('cities.txt'), $NUM_CITIES, \@cities);
&printElements(getFileHandle('names.txt'), \@cities);

sub printElements{

    my $counter = 0;
    my $arraySize = scalar $_[1];

    # Prints fine!!!
    print @{$_[1][($counter)%$arraySize];

    while ((my $line = $_[0]->getline()) && $counter < 1000){

        #Doesn't print. Generates the above error
        print @{$_[1][($counter)%$arraySize];

        $counter += 1; …
Run Code Online (Sandbox Code Playgroud)

arrays perl scalar-context

3
推荐指数
1
解决办法
2162
查看次数

标签 统计

perl ×2

arrays ×1

scalar-context ×1

types ×1