<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Windows Low Fragmentation Heap</title>
	<atom:link href="http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/</link>
	<description>Ramblings from the mind of Stuart Parmenter</description>
	<pubDate>Sat, 19 Jul 2008 11:13:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
		<item>
		<title>By: &#8220;Vlad and analysis of dtrace was used&#8221; &#171; pavlov.net</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-937</link>
		<dc:creator>&#8220;Vlad and analysis of dtrace was used&#8221; &#171; pavlov.net</dc:creator>
		<pubDate>Tue, 04 Dec 2007 22:41:47 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-937</guid>
		<description>[...] compare the Windows standard heap, the Windows Low-Fragmentation Heap, nedmalloc and jemalloc.  I&#8217;ve posted pictures from the two Windows allocators before, but [...]</description>
		<content:encoded><![CDATA[<p>[...] compare the Windows standard heap, the Windows Low-Fragmentation Heap, nedmalloc and jemalloc.  I&#8217;ve posted pictures from the two Windows allocators before, but [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: malloc replacements? &#171; pavlov.net</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-597</link>
		<dc:creator>malloc replacements? &#171; pavlov.net</dc:creator>
		<pubDate>Wed, 21 Nov 2007 21:22:36 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-597</guid>
		<description>[...] such as tcmalloc, nedmalloc, Hoard, and jemalloc.  Also native platform specific ones such as the Windows low-fragmentation heap. I&#8217;m having to dig in to some of their internals to pull out the data that we need which is [...]</description>
		<content:encoded><![CDATA[<p>[...] such as tcmalloc, nedmalloc, Hoard, and jemalloc.  Also native platform specific ones such as the Windows low-fragmentation heap. I&#8217;m having to dig in to some of their internals to pull out the data that we need which is [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pavlov</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-398</link>
		<dc:creator>pavlov</dc:creator>
		<pubDate>Wed, 14 Nov 2007 16:56:08 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-398</guid>
		<description>Peter: I've tried using HeapCompact() but I don't see a lot of big wins from it.  I should probably do some more tests though.</description>
		<content:encoded><![CDATA[<p>Peter: I&#8217;ve tried using HeapCompact() but I don&#8217;t see a lot of big wins from it.  I should probably do some more tests though.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-396</link>
		<dc:creator>Peter</dc:creator>
		<pubDate>Wed, 14 Nov 2007 16:04:03 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-396</guid>
		<description>Did you try to see if _heapmin() had any effect? I made some experiments on OS/2 last night, adding that to the cycle collector and it had at least a bit of an effect.

I also experimented with OS/2 system APIs (DosAllocMem/DosFreeMem) instead of malloc for allocations of large buffers (e.g. the pixel buffers in cairo). This basically allocates memory outside the C heaps and when freed gets released to the system immediately. Made a huge difference! Not sure if there is something like that on the Win or the other platforms.</description>
		<content:encoded><![CDATA[<p>Did you try to see if _heapmin() had any effect? I made some experiments on OS/2 last night, adding that to the cycle collector and it had at least a bit of an effect.</p>
<p>I also experimented with OS/2 system APIs (DosAllocMem/DosFreeMem) instead of malloc for allocations of large buffers (e.g. the pixel buffers in cairo). This basically allocates memory outside the C heaps and when freed gets released to the system immediately. Made a huge difference! Not sure if there is something like that on the Win or the other platforms.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stuart Parmenter</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-385</link>
		<dc:creator>Stuart Parmenter</dc:creator>
		<pubDate>Wed, 14 Nov 2007 00:02:53 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-385</guid>
		<description>I've posted some Windows Minefield beta 1 builds on my blog with the low-fragmentation heap enabled.  Please try them out and give feedback on that post.
</description>
		<content:encoded><![CDATA[<p>I&#8217;ve posted some Windows Minefield beta 1 builds on my blog with the low-fragmentation heap enabled.  Please try them out and give feedback on that post.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lerc</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-384</link>
		<dc:creator>Lerc</dc:creator>
		<pubDate>Tue, 13 Nov 2007 23:28:24 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-384</guid>
		<description>Is there any facility to tag memory allocations with info from the call stack so you see where they came from?

combining something like that with these pretty heapmap images so you could hover and see what caused the allocation would help shed light on the issue.

There is the possibilty of heap defragmentation ofr any objects that allocate memory for their own use and don't pass pointers to others.  Only one reference would have to be maintained.  You'd need to have those objects select an alternate allocation system.  or just add a ReallocatePrivateMemory method to base objects.

The lifetime hint comment by max in the previous blogpost is another good idea.

both of those will involve delving into the actual allocating code, but I suspect the quick fix of an alternate heap manager won't be the best solution.

</description>
		<content:encoded><![CDATA[<p>Is there any facility to tag memory allocations with info from the call stack so you see where they came from?</p>
<p>combining something like that with these pretty heapmap images so you could hover and see what caused the allocation would help shed light on the issue.</p>
<p>There is the possibilty of heap defragmentation ofr any objects that allocate memory for their own use and don&#8217;t pass pointers to others.  Only one reference would have to be maintained.  You&#8217;d need to have those objects select an alternate allocation system.  or just add a ReallocatePrivateMemory method to base objects.</p>
<p>The lifetime hint comment by max in the previous blogpost is another good idea.</p>
<p>both of those will involve delving into the actual allocating code, but I suspect the quick fix of an alternate heap manager won&#8217;t be the best solution.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-383</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Tue, 13 Nov 2007 23:16:24 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-383</guid>
		<description>take a look at these papers on pools and fragmentation:

http://slashdot.org/comments.pl?sid=120623&#38;cid=10160124

http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf

</description>
		<content:encoded><![CDATA[<p>take a look at these papers on pools and fragmentation:</p>
<p><a href="http://slashdot.org/comments.pl?sid=120623&amp;cid=10160124" rel="nofollow">http://slashdot.org/comments.pl?sid=120623&amp;cid=10160124</a></p>
<p><a href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" rel="nofollow">http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-382</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Tue, 13 Nov 2007 23:07:15 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-382</guid>
		<description>Use Doug Lea's malloc. It's far better than Windows Low Frag heap.

http://g.oswego.edu/
</description>
		<content:encoded><![CDATA[<p>Use Doug Lea&#8217;s malloc. It&#8217;s far better than Windows Low Frag heap.</p>
<p><a href="http://g.oswego.edu/" rel="nofollow">http://g.oswego.edu/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ThomasK</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-381</link>
		<dc:creator>ThomasK</dc:creator>
		<pubDate>Tue, 13 Nov 2007 16:00:43 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-381</guid>
		<description>Good work, Stuart.
This could help a lot of other projects (longer running processes in non-GC environments), so please keep your analysis abstract enough that things != FF could profit too.
</description>
		<content:encoded><![CDATA[<p>Good work, Stuart.<br />
This could help a lot of other projects (longer running processes in non-GC environments), so please keep your analysis abstract enough that things != FF could profit too.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mirza</title>
		<link>http://blog.pavlov.net/2007/11/11/windows-low-fragmentation-heap/#comment-380</link>
		<dc:creator>Mirza</dc:creator>
		<pubDate>Tue, 13 Nov 2007 10:37:18 +0000</pubDate>
		<guid isPermaLink="false">http://pavlovdotnet.wordpress.com/2007/11/11/windows-low-fragmentation-heap/#comment-380</guid>
		<description>Hello, I had the same problem: I needed to load millions of street names (as std::string) to memory at once. Albeit size of combined strings is some 100 MB, program easily used all of my 1GB of RAM and crashed. Therefore, I created simple class "StringContainer" (300 lines of C++ code) that stores all strings as one huge string plus additional binary tree for fast access. You can StrHandle h = container.put(std:string) and later use this handle to get string back std::string s = container.get(h). Now all strings use as little memory as combined size of all strings (also, multiple identical strings are stored only once!). Get method is using special binary tree to retrieve string quickly, but tree nodes are stored in std::vector, so tree itself also occupy single chunk of memory! Removing single string from this container is not possible, but it is not problem in way I am using it. For example you can setup one container for each HTML page or each Java Script so container lives as long as its domain is alive. If you want this class, send me your mail to mirza@seznam.cz.
</description>
		<content:encoded><![CDATA[<p>Hello, I had the same problem: I needed to load millions of street names (as std::string) to memory at once. Albeit size of combined strings is some 100 MB, program easily used all of my 1GB of RAM and crashed. Therefore, I created simple class &#8220;StringContainer&#8221; (300 lines of C++ code) that stores all strings as one huge string plus additional binary tree for fast access. You can StrHandle h = container.put(std:string) and later use this handle to get string back std::string s = container.get(h). Now all strings use as little memory as combined size of all strings (also, multiple identical strings are stored only once!). Get method is using special binary tree to retrieve string quickly, but tree nodes are stored in std::vector, so tree itself also occupy single chunk of memory! Removing single string from this container is not possible, but it is not problem in way I am using it. For example you can setup one container for each HTML page or each Java Script so container lives as long as its domain is alive. If you want this class, send me your mail to <a href="mailto:mirza@seznam.cz">mirza@seznam.cz</a>.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
