You confused my point which is that your usual malloc/free definitely
does no garbage collection. That does not mean that a C language
program cannot perform garbage collection, just look at a Java run time
package for an example.
If you never execute a free your dynamic memory is essentially contiguous.
Joe Wilson wrote:
--- John Stanton <[EMAIL PROTECTED]> wrote:
Malloc is a concept implemented in various ways, some more successful
than others but all of them hidden from the programmer. Free tries to
give back memory but as you can appreciate unless you use some garbage
collection scheme with backwards pointers fragmentation and
checkerboarding is very difficult to avoid.
You seem to be confusing the topics of malloc/free memory fragmentation
with C garbage collection - they are orthogonal concepts.
C's free() has no power to free up any extra memory as active memory
must stay where it was allocated until freed or else you'll have
dangling pointers. A single call to free() typically releases only memory
allocated by a single malloc() call. If, as result of the free, there
happens to be block(s) of memory immediately before or after that
released memory then that entire memory region can be coalesced and
be made available as a larger block to future mallocs.
If a C program employs perfect 1:1 malloc'ing to free'ing, i.e., has no
memory leaks, then garbage collection is irrelevant to the topic of
memory fragmentation. It's not like C can employ a copying garbage
collector that moves memory blocks after free() without the knowledge
or participation of the host program. The malloc() call is where
fragmentation happens. Fragmentation in malloc depends on your allocation
strategy: first-fit, best-fit, short-lived versus long-lived pools,
per-allocation-size pools, statistical prediction, etc. Malloc must
try to guess where an allocation must go to try to prevent future
memory fragmentation.
____________________________________________________________________________________
Get easy, one-click access to your favorites.
Make Yahoo! your homepage.
http://www.yahoo.com/r/hs
-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------