dostaję ten błąd robiąc rebase git svn w CygwinDlaczego Git.pm na cygwin narzeka na "Brak pamięci podczas" dużego "żądania?
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 jest 256MB. Maksymalny rozmiar pamięci Cygwin jest ustawiony na 1024 MB, więc przypuszczam, że ma on inny maksymalny rozmiar pamięci dla perla?
Jak mogę zwiększyć maksymalny rozmiar pamięci, którego mogą używać programy perl?
zmiana: To gdzie występuje błąd (w 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;
}
Dodałem wydruk przed linią 898 do wydrukowania $ bytesToRead i $ bytesRead i wynik był 1024 dla $ bytesToRead i 134220800 dla $ bytesRead, więc odczytuje 1024 bajty na raz i już przeczytał 128 MB. Funkcja "odczytu" Perla musi być za mało pamięci i próbuje zażądać podwojenia jej rozmiaru pamięci ... czy istnieje sposób na określenie wymaganej ilości pamięci? lub czy ta implementacja jest zależna?
Update2: Podczas testowania alokacji pamięci w Cygwin: wyjście tego program w C był 1536 MB
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;
}
Choć ten program Perl rozbił jeśli rozmiar pliku jest większy niż 384MB (ale udało się, jeśli rozmiar pliku był mniej).
open(F, "<400") or die("can't read\n");
$size = -s "400";
$read = read(F, $s, $size);
Błąd jest podobna
Out of memory during "large" request for 536875008 bytes, total sbrk() is 217088 bytes at mem.pl line 6.
Czy jesteś pewien, że problem dotyczy Cygwin? Msys git ma swój własny periodyk msys (zazwyczaj "C: \ Program Files \ Git \ bin \ perl.exe"). Nie jestem pewien, co dzieje się pod Cygwin, ale przy użyciu konsoli win32, msysgit używa swojego perla zamiast innych perls w moim systemie. – daotoad
Ach tak masz rację, ale mój test pamięci perl używa wersji pergola cygwin i ma ten problem również –