Я получаю эту ошибку при выполнении git svn rebase в cygwin
Out of memory during "large" request for 268439552 bytes, total sbrk() is 140652544 bytes at /usr/lib/perl5/site_perl/Git.pm line 898, <GEN1> line 3.
268439552 - 256 МБ. Размер памяти Cygwin maxium установлен на 1024 МБ, поэтому я предполагаю, что у него есть другой максимальный размер памяти для perl?
Как увеличить максимальный объем памяти, который могут использовать программы perl?
обновление: Здесь происходит ошибка (в Git.pm):
while (1) {
my $bytesLeft = $size - $bytesRead;
last unless $bytesLeft;
my $bytesToRead = $bytesLeft < 1024 ? $bytesLeft : 1024;
my $read = read($in, $blob, $bytesToRead, $bytesRead); //line 898
unless (defined($read)) {
$self->_close_cat_blob();
throw Error::Simple("in pipe went bad");
}
$bytesRead += $read;
}
Я добавил печать перед строкой 898, чтобы распечатать $bytesToRead и $bytesRead, а результат был 1024 для $bytesToRead и 134220800 для $bytesRead, поэтому он читает 1024 байта за раз, и он уже прочитал 128 МБ. Perl 'read' функция должна быть не в памяти и пытается запросить удвоение объема памяти... есть ли способ указать, сколько памяти потребуется запросить? или это зависит от реализации?
UPDATE2: При тестировании выделения памяти в cygwin: Этот выход C-программы составлял 1536 МБ
int main() {
unsigned int bit=0x40000000, sum=0;
char *x;
while (bit > 4096) {
x = malloc(bit);
if (x)
sum += bit;
bit >>= 1;
}
printf("%08x bytes (%.1fMb)\n", sum, sum/1024.0/1024.0);
return 0;
}
В то время как эта программа perl разбилась, если размер файла больше 384 МБ (но преуспел, если размер файла был меньше).
open(F, "<400") or die("can't read\n");
$size = -s "400";
$read = read(F, $s, $size);
Ошибка аналогична
Out of memory during "large" request for 536875008 bytes, total sbrk() is 217088 bytes at mem.pl line 6.