perl - массив целых чисел, использующий слишком много памяти?

Когда я запускаю следующий сценарий:

my @arr = [1..5000000];

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

Он потребляет около 500 МБ памяти. При использовании скомпилированных языков более высокого уровня я ожидал, что это будет примерно 5M * 4B = 20MB (4 байта на число).

Я думаю, это потому, что каждое значение является скаляром, а не простым двоичным числом. Можно ли уменьшить объем памяти, обрабатывая эти значения как числа, или 500 МБ для этой задачи - единственный способ?

7
задан Konrad Garus 22 June 2011 в 13:33
поделиться