Ricevo questo errore mentre si fa un rebase git svn in CygwinPerché Git.pm su cygwin si lamenta della richiesta "Memoria esaurita 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 è 256 MB. La dimensione massima della memoria Cygwin è impostata su 1024 MB, quindi suppongo che abbia una dimensione di memoria massima diversa per perl?
Come è possibile aumentare la dimensione massima della memoria che i programmi Perl possono utilizzare?
aggiornamento: Questo è dove si verifica l'errore (in 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;
}
Ho una stampa prima linea 898 per stampare $ BytesToRead e $ bytesRead e il risultato è stato 1024 per $ bytesToRead e 134220800 for $ BytesRead, quindi sta leggendo 1024 byte alla volta e ha già letto 128 MB. La funzione di "lettura" di Perl deve essere esaurita e sta tentando di richiedere il doppio della sua dimensione di memoria ... c'è un modo per specificare la quantità di memoria da richiedere? o l'implementazione dipende?
UPDATE2: Durante il test di allocazione di memoria in Cygwin: uscita di questo programma 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;
}
Anche se questo programma Perl è schiantato se la dimensione del file è superiore a 384 MB (ma è riuscito se la dimensione del file è stato meno).
open(F, "<400") or die("can't read\n");
$size = -s "400";
$read = read(F, $s, $size);
L'errore è simile
Out of memory during "large" request for 536875008 bytes, total sbrk() is 217088 bytes at mem.pl line 6.
Sei sicuro che la codifica di Cygwin è il problema qui? Msys git viene fornito con il proprio msys perl (in genere 'C: \ Programmi \ Git \ bin \ perl.exe'). Non sono sicuro di cosa succede sotto Cygwin, ma sotto l'uso della console win32, msysgit usa il suo perl invece degli altri perls sul mio sistema. – daotoad
Ah sì hai ragione, ma il mio test di memoria perl utilizza la versione di perl di cygwin e ha anche questo problema –