mallocr.c implementation

Nick Clifton nickc@redhat.com
Wed Nov 17 09:28:00 GMT 2004


Hi Craig,

>     int size = 1024*1024;
>     char *c = malloc(62 * size);
> 
> This allocates 62MB of memory just fine (the XBOX has 64MB physical 
> RAM).   If I use 63, then it hangs (which I am investigating 
> separately).  So, I  know that I can successfully allocate up to at 
> least 62MB.  

Just being paranoid - but have you checked that the 62MB is actually 
there ?  Ie can you use all of it ?  If there a problems in the memory 
allocation system somewhere then it may be that the apparent success of 
your 62Mb malloc call is in fact a fake.

> Now, if I  change the program to look like:
>     
>     int size = 1024*1024;
>     for (int i = 0; i < 62; i++)
>         char *c = malloc(size);
> 
> I would have suspected that this should work too, but it only manages 
> to  allocate eight buffers.  Why such a disparity?  I might have 
> understood if  it could only get to 61 or 60, but only 8?

Maybe only 8 separate calls to malloc() can be supported ?  If you
change 'size' to say 1024, can you get more allocated buffers ? 
Incidentally what happens when you try to allocate the ninth megabyte 
buffer ?  Does malloc return NULL ?

If you free the 8 buffers can you allocate 8 more ?  Or 9 more ?

Usually a problem like this will be in your kernel's memory allocation 
system somewhere, rather than in the newlib code.  So if you are able to 
enable debugging there then I suspect that that would help.

Cheers
   Nick



More information about the Newlib mailing list