而在Cygwin的做一个混帐SVN变基我得到这个错误为什么Cygwin上的Git.pm会抱怨“大”请求期间内存不足?
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为256MB。 Cygwin的最大内存大小设置为1024MB,所以我猜测它有不同的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个字节,它已经读取128MB。 Perl的'读'功能必须是内存不足,并试图请求两倍的内存大小......有没有办法指定要求多少内存?或者那个实现是依赖的?
UPDATE2: 在测试内存分配中的cygwin: 这个C程序的输出为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;
}
虽然这个perl程序崩溃如果文件大小超过384MB以上(但成功如果文件大小为少)。
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.
你确定Cygwin的配置是这里的问题吗? Msys git带有自己的msys perl(通常是'C:\ Program Files \ Git \ bin \ perl.exe')。我不知道Cygwin下会发生什么,但在win32控制台使用下,msysgit使用它的perl而不是我的系统上的其他perls。 – daotoad 2009-12-17 01:26:40
啊是的你是对的,但我的Perl内存测试使用cygwin的Perl版本,它也有这个问题以及 – 2009-12-17 01:41:50