скрипт на perl вылетает при создании массива?
этот код — это данность? кто автор? что он должен делать?
Я уже решила эту проблему по-другому, заменив
while (<INPUT>){
chomp;
$hist[$str]->[$k] = $_;
$str++;
}
....
цикл по $str {
цикл по $k {
print "$hist[$str]->[$k] ";
}}
на
while (<INPUT>){
chomp;
$hist[$str] .= "$_;";
$str++;
}
....
цикл по $str {
print "$hist[$str]";
}
Но все равно интересно почему первый вариант не работает.
я правильно понял, что всего порядка 3000 файлов, каждый по 2-2.5MB? т.е. объем выходного файла порядка 7GB и скрипт это дело пишет сначал в этот двумерный массив в памяти? сколько памяти на машинке?
Не может же это быть просто глюком?
в перле нет sparse массивов, когда ты создаешь массив и заполняешь в нем только 3000-ный элемент, но все предыдущие элементы тоже аллоцируются и заполняются undef-ами. а 2.5Mb * 3000 = 7.5Gb
Поняла Спасибо!
аллоцируются и заполняются undef-ами. а 2.5Mb * 3000 = 7.5GbТак ведь undef != 2.5Mb ?
подозреваю что undef должен занимать памяти порядка размера указателя на данной платформе. (в сях - размер указателя, в языках более высокого уровня может и больше получиться).
подозреваю что undef должен занимать памяти порядка размера указателя на данной платформе. (в сях - размер указателя, в языках более высокого уровня может и больше получиться).Да даже если несколько слов занимает, то всё равно массив из 3000 таких элементов — это немного.
посчитай сколько будут отжирать 540000 массивов по 3000 элементов, каждый из которых занимает одно слово.
посчитай сколько будут отжирать 540000 массивов по 3000 элементов, каждый из которых занимает одно слово.А, этот момент я пропустил.
Оставить комментарий
zakysj50
Почему скрипт может вылетать при создании двумерного массива?
При этом с некоторыми файлами все работает нормально, а для других скрипт считывает часть файла и падает Файлы немного отличаются по размеру. Файлы - текстовые, около 540000 строчек, 2-2.5 мб.
Если $hist[$str]->[$k] = $_; заменить на $hist[$str] = $_; то программа работает для любых файлов.