On Fri, Jun 04, 2010 at 09:51:53PM +0200, Florian Weimer wrote:
* John Meacham:
There is just one thing that is bothering me, I still rely on libJudy in the runtime for its extremely fast bitset operation. Basically, in order to determine if an address is allocated on the heap vs on the stack or in the bss or data segments, I use a bitmap, adding an entry for each 4M chunk of memory dedicated to heap pages. on a 64 bit system, using a plain bit array is just not feasable, libJudy has a very fast bitset that I utilize, but it is not exactly lightweight and is LGPL which may cause issues for creating statically linked executables from jhc.
You could use mmap with PROT_NONE to get a large chunk of contiguous address space, and allocate the parts you actually use with mprotect, setting PROT_READ and PROT_WRITE. Then it's far easier to tell which addresses are part of the heap and which aren't.
Yeah, there are various schemes to use mprotect to form write/read barriers for incremental GCs. For now, I wanted to stick to producing portable code, however that may be something I explore later. A portable fallback would still be needed though, so might as well start with that rather than making assumptions about the target platform. John -- John Meacham - ⑆repetae.net⑆john⑈ - http://notanumber.net/