Khi tôi chạy kịch bản sau đây:perl - mảng các số nguyên sử dụng quá nhiều bộ nhớ?
my @arr = [1..5000000];
for($i=0; $i<5000000; $i++) {
$arr[$i] = $i;
if($i % 1000000 == 0) {
print "$i\n";
}
}
Nó tiêu thụ khoảng 500 MB bộ nhớ. Được sử dụng cho các ngôn ngữ biên dịch cấp cao hơn, tôi hy vọng nó sẽ là khoảng 5M * 4B = 20MB (4 byte cho mỗi số).
Tôi đoán đó là vì mỗi giá trị là một vô hướng, không phải là số nhị phân đơn giản. Có thể giảm dung lượng bộ nhớ bằng cách xử lý các giá trị đó dưới dạng số hay 500 MB cho tác vụ này theo cách duy nhất không?
Một phần của vấn đề là 'my @arr = [1..5000000];' là một sai lầm và không làm những gì bạn muốn. Bạn có thể thấy ít sử dụng hơn nếu bạn viết 'my @arr = (1..5000000);'. Hoặc đơn giản là 'my @arr;' vì bạn không sử dụng bất kỳ giá trị nào bạn khởi tạo. – hobbs
@hobbs - Tôi đã tạo ra ví dụ đơn giản nhất có thể. Kịch bản thực sự của tôi không sử dụng mảng. –