que estoy recibiendo este error al hacer un git rebase svn en cygwin¿Por qué Git.pm en cygwin se queja de la solicitud de "Memoria agotada durante" grande "?
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 es de 256 MB. El tamaño máximo de memoria de Cygwin está configurado en 1024 MB, así que supongo que tiene un tamaño de memoria máximo diferente para Perl.
¿Cómo puedo aumentar el tamaño máximo de memoria que los programas perl pueden usar?
actualización: Aquí es donde se produce el error (en 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;
}
¡Tengo una impresión antes de la línea 898 para imprimir $ bytesToRead y $ BytesRead y el resultado fue de 1.024 $ bytesToRead, y 134220800 por $ bytesRead, por lo que está leyendo 1024 bytes a la vez y ya ha leído 128MB. La función de "lectura" de Perl debe estar sin memoria y está tratando de solicitar el doble de su tamaño de memoria ... ¿hay alguna forma de especificar cuánta memoria solicitar? o es esa implementación dependiente?
Update2: Durante la prueba de asignación de memoria en cygwin: de salida de este programa en C era 1536MB
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;
}
Si bien este programa Perl se estrelló si el tamaño del archivo es mayor que 384 MB (pero tuvo éxito si el tamaño del archivo era menos)
open(F, "<400") or die("can't read\n");
$size = -s "400";
$read = read(F, $s, $size);
El error es similar
Out of memory during "large" request for 536875008 bytes, total sbrk() is 217088 bytes at mem.pl line 6.
¿Estás seguro de que la cofiguración de Cygwin es el problema aquí? Msys git viene con su propio msys perl (típicamente 'C: \ Program Files \ Git \ bin \ perl.exe'). No estoy seguro de lo que sucede bajo Cygwin, pero bajo el uso de la consola win32, msysgit usa su Perl en lugar de los otros Perls en mi sistema. – daotoad
Ah sí, tienes razón, pero mi prueba de memoria perl usa la versión de perl de cygwin y también tiene este problema –