Hi there, I've played around with this first patch a bit, and I think I've found a way to apply the same technique without complicating the logic in C_reclaim(). Attached is a sign-off of megane's patch that introduces the same min-free requirement, but only at the point where reallocations are triggered. This actually gives a minor performance improvement over the initial version (which itself is a significant improvement over master), and it's a less invasive change because it leaves the heap resizing logic unchanged.
Here are the benchmarks -- review-0001 (in the middle) is the original patch, and review-1001 (on the right) is this version: http://paste.call-cc.org/paste?id=bdadc47d53512e46e563af1830a7bf6b276eb378 (I also played around with the initial and min-free heap values but couldn't find any improvements that way.) megane, could you please have a look at this version and confirm the results? I'm keen to get this reduction in major GCs, so I'm hoping a simpler version of the patch is OK. Cheers, Evan