<?xml version="1.0" encoding="windows-1252"?>
<node id="333472" title="Re: Not able to release memory" created="2004-03-03 02:24:46" updated="2005-02-24 19:27:00">
<type id="11">
note</type>
<author id="176576">
eyepopslikeamosquito</author>
<data>
<field name="doctext">
&lt;P&gt;A while back, I did a simple test of mallocing a 4 MB chunk
of memory, then freeing it. The memory &lt;I&gt;was&lt;/I&gt; returned to the
OS on Windows and Linux -- but not on every other of the 12 different
platforms I ran the test on.&lt;/P&gt;

&lt;P&gt;Whether the memory is returned to the OS or not depends on the
implementation of the user-level &lt;I&gt;malloc&lt;/I&gt; function.
Most implementations of malloc simply call &lt;I&gt;sbrk(2)&lt;/I&gt; to increase
the address space of the process. Since this call is expensive,
when you call &lt;I&gt;free&lt;/I&gt;, they typically do not return the memory to
the OS, but keep it to reuse next time you call malloc.&lt;/P&gt;

&lt;P&gt;glibc 2.x based Linux systems use &lt;I&gt;ptmalloc&lt;/I&gt;, which is based on
Doug Lea's malloc. This version of malloc is able to return
memory to the OS because it uses &lt;I&gt;mmap(2)&lt;/I&gt;, rather than sbrk,
when the chunk of memory requested is larger than some
threshold value (typically 128K). MSVC CRT similarly uses
a "small block" and "large block" heap heuristic -- but uses
Win32 heaps, rather than sbrk/mmap, under the covers.&lt;/P&gt;

&lt;P&gt;So, if you were desperate to have memory returned to the OS,
you could go to the bother of building a custom perl which used
a different implementation of malloc.&lt;/P&gt;
</field>
<field name="root_node">
333464</field>
<field name="parent_node">
333464</field>
</data>
</node>
