скрипт на 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 и скрипт это дело пишет сначал в этот двумерный массив в памяти? сколько памяти на машинке?
нет, файлов всего 30 ($k=100,200,300,...3000 но каждый не больше 2.5мб. Но скрипт падает даже при работе с одним просто записывая в память двумерный массив, и не падает, когда массив одномерный. Оперативной памяти на компе - 3500мб.
Не может же это быть просто глюком?
Не может же это быть просто глюком?

в перле нет 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
Почему скрипт может вылетать при создании двумерного массива?
При этом с некоторыми файлами все работает нормально, а для других скрипт считывает часть файла и падает
Если $hist[$str]->[$k] = $_; заменить на $hist[$str] = $_; то программа работает для любых файлов.