GNU bug report logs -
#13530
head: memory exhausted when printing all from stdin but last P/E bytes
Previous Next
Reported by: Lei Zhang <lei.zhang <at> uwaterloo.ca>
Date: Wed, 23 Jan 2013 02:43:01 UTC
Severity: normal
Done: Pádraig Brady <P <at> draigBrady.com>
Bug is archived. No further changes may be made.
Full log
Message #17 received at 13530 <at> debbugs.gnu.org (full text, mbox):
On 01/23/2013 02:03 PM, Pádraig Brady wrote:
> On 01/23/2013 12:53 PM, Bernhard Voelker wrote:
>> head doesn't "allocate everything up front" - instead, it only
>> allocates the pointer array which would hold the actual data.
>
> Sure. I was wondering whether that should change
> to allocate everything up front so as to exit early.
I think that's not a good idea because head would ENOMEM
even if it doesn't wouldn't need the memory (depending on the
input). Why should the following fail?
$ echo 123 | head -c -T
I think there's no reason to fail until we really know it would
fail. In this case, we can only know it when we actually come
to the point when we need the memory.
It doesn't matter if we have
$ echo 123 | head -c -10
or
$ echo 123 | head -c -P
>>> free_mem:
>>> - for (i = 0; i < n_bufs; i++)
>>> + for (i = 0; i < n_alloc; i++)
>>> free (b[i]);
>>> free (b);
>>
>> BTW: both in the old and the new version, the loop can break
>> if (b[i] == 0) because the array is filled from the beginning.
>
> The new version only frees what's allocated and so gets this benefit too.
ah yes, sorry, I didn't look close enough.
Have a nice day,
Berny
This bug report was last modified 12 years and 42 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.