Re: [Gc] dynamic structures and gc
Ivan Maidanski
ivmai at mail.ru
Fri Sep 2 12:26:47 PDT 2011
Hi Mark,
To my understanding, you should measure (GC_get_heap_size() - GC_get_free_bytes()) instead of GC_get_heap_size().
Regards.
02 09 2011, 23:20 Mark Richards <mark.richards at massmicro.com>:
> gnu c
> linux: built gc for armv5tejl GNU/Linux
> gc version 6.8
>
> My code uses a bunch of dynamically allocated structures and I have
> turned to gc as it seems when I free the structures (in the same manner
> as in the example below) the heap just keeps growing. It is as if I had
> not freed at all.
>
> Here is a test case:
>
> struct _aemErrors
> {
> int stored;
> int mailed
> char *cFunction;
> char *cDesc;
> };
> struct _aemErrors **aemErrors;
> int aemErrorsCount;
>
> // print the heap size here
> printf("Heap size = %d\n", GC_get_heap_size());
> // add some
> int i=0;
> for (i=0;i<100;i++)
> {
>
> ++aemErrorsCount;
> aemErrors = (struct _aemErrors **)realloc(aemErrors,
> (aemErrorsCount+1) * sizeof(struct _aemErrors *));
> aemErrors[aemErrorsCount] = (struct _aemErrors
> *)malloc(sizeof(struct _aemErrors)); return(aemErrorsCount);
>
> aemErrors[aemErrorsCount]->cFunction=strdup("this is just a test");
> aemErrors[aemErrorsCount]->cDesc=strdup("this is just a test");
>
> }
> // print the heap size here
> printf("Heap size = %d\n", GC_get_heap_size());
>
> // now free them
> for (i=0;i<100;i++)
> {
> GC_free(aemErrors[i]->cFunction);
> GC_free(aemErrors[i]->cDesc);
> GC_free(aemErrors[i]);
> }
> GC_free(aemErrors);
> // print the heap size here
> printf("Heap size = %d\n", GC_get_heap_size());
>
> The heap reports 0 when we start, something (significant) after we do
> the allocation and, I see the same large heap size after the free
> process. Same as my test case without using gc.
>
> I am forcing GC_free() as I wish to see if in fact the allocated memory
> is returned to the system. It does not seem to be happening.. or
> perhaps I am missing something here.
>
> So question: If I do not use GC_free, how does gc determine when to
> reclaim allocated memory? In the case of my dynamic structure, many of
> these are built when my program starts and many stay alive always, where
> others are built and discarded. It would be not nice if gc freed memory
> I had built for a structure, and then I need access to it.
>
> /m
>
> _______________________________________________
> Gc mailing list
> Gc at linux.hpl.hp.com
> http://www.hpl.hp.com/hosted/linux/mail-archives/gc/
>
More information about the Gc
mailing list