[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: NSArray: Problem allocating memory on stack on windows
From: |
Nicola Pero |
Subject: |
Re: NSArray: Problem allocating memory on stack on windows |
Date: |
Thu, 9 Oct 2003 11:40:10 +0100 (BST) |
> It looks like that:
> - (id) initWithArray: (NSArray*)array
> {
> unsigned c = [array count];
> id objects[c];
>
> [array getObjects: objects];
> self = [self initWithObjects: objects count: c];
> return self;
> }
>
> with
> id objects[c];
> gcc allocates space on the stack for c elements using alloca().
> On windows stacksize is limited. So at present when calling initWithArray
> with an array containing more then ~52100 elements stack runs out of space
> and applications crashes (or behaves really silly, depending what gets
> overwritten)
>
> The solution here to fix this would be to replace all that dynamic array stuff
> with malloc()/free() calls.
But alloca is much quicker! We don't want to loose that speed for small
arrays. I think the solution is:
if (c < 100)
use alloca as in the current code
else
use malloc()/free() as you suggest
(replace 100 with another reasonable default if you want).
Btw I already met this bug and I'm sure I had fixed it ... I must have
forgotten to commit the patch.
Re: NSArray: Problem allocating memory on stack on windows, Richard Frith-Macdonald, 2003/10/09