Когда я запускаю следующий сценарий:
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 МБ для этой задачи - единственный способ?