Я начинаю начинать. Я пытаюсь построить 2d-массив во время выполнения из двоичного файла. Я получаю ошибку «из памяти». Я использую Perl 5.16.3 в Windows 7. Размер моего входного файла составляет ~ 4.2MB. Моя система имеет физическую память 4 ГБ, и я использую 90% использования, а затем обнаруживаю ошибку из памяти при запуске этого кода.Perl: Ошибка памяти при построении массива 2d во время выполнения
Я пробовал много способов отладить это. Только если я уменьшу b32 до b16 или меньше, я могу успешно работать. Даже при этом, если размер файла превышает 4 МБ, ошибка появляется снова. Я пытался смотреть на использование физической памяти в диспетчере задач, выполняя код, он продолжает расти.
Мой друг подозревал, что это проблема с утечкой памяти. Я не мог разобраться со своим подозреваемым. Мне нужна помощь по исправлению этого.
#!/usr/bin/perl
use strict;
use warnings;
open(DATA, 'debug.bin') or die "Unable to open:$!";
binmode DATA;
my ($data, $n, $i);
my @2dmatrix;
while ($n = read DATA, $data, 4) {
push @2dmatrix, [ split('', unpack('b32', $data)) ];
}
print scalar(@2dmatrix);
print "completed reading";
close(DATA);
Просто, чтобы убрать требование. Из сборки массива 2d мне нужно извлечь содержимое из столбца A, соответствующего определенному шаблону (11111111000000001111111100000000) в столбце B. Это необходимо сделать для 4-х колонок с размером файла 500 Мб.
Попробуйте обрезать данные на меньший размер блоков, которые могут помочь вам в устранении ошибки в памяти. – Praveen
требования к английскому языку гораздо более двусмысленны, чем код; вам нужно всего 40 строк за раз? – ysth
@ysth Да. но 40 строк не могут быть решены напрямую. Я должен игнорировать множество строк между ними, в зависимости от варианта использования. Итак, я выбрал сборку всего массива и процесс. – tirumalesh