perl - segfault on "free unused scalar"
Krzysztof Duleba
krzysan@skrzynka.pl
Wed Jul 27 17:12:00 GMT 2005
Gerrit P. Haase wrote:
>>> $ ./inter.pl
>>> perl> sub foo($){$a=shift;foo($a+1);}
>>> perl> foo 1
>>> Out of memory during request for 4040 bytes, total sbrk() is
>>> 402624512 bytes!
>>> Segmentation fault (core dumped)
>>
>> Another version (with "my $a"):
>>
>> perl> sub foo($){my $a=shift;foo($a+1);}
>> perl> foo 1
>> Out of memory during "large" request for 134221824 bytes, total sbrk()
>> is 304633856 bytes at (eval 19) line 1.
>> perl> foo 1
>> Bad realloc() ignored at (eval 19) line 1.
>> Segmentation fault (core dumped)
>>
>> Is this a perl bug, Cygwin bug, or just a feature?
>
> I don't know. Maybe it is a Windows feature that applications running
> out of memory are crashing?
But there's plenty of memory left when perl crashes. I have 1 GB RAM and 1
GB swap file.
I've simplified the test case. It seems that Cygwin perl can't handle too
much memory. For instance:
$ perl -e '$a="a"x(200 * 1024 * 1024); sleep 9'
OK, this could have failed because $a might require 200 MB of continuous
space. But hashes don't, do they? Then why does the following code fail?
$ perl -e '$a="a"x(1024 * 1024);my %b; $b{$_}=$a for(1..400);sleep 9'
Or that one?
$ perl -e '$a="a"x(50 * 1024 * 1024);$b=$a;$c=$a;$d=$a;$e=$a;sleep 10'
On linux there's no such problem - perl can use all available memory.
Krzysztof Duleba
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
More information about the Cygwin
mailing list