On Wednesday, 14 September 2016 at 05:38:38 UTC, Shachar Shemesh
wrote:
On 14/09/16 02:59, Walter Bright wrote:
Memory allocated with malloc() is unknown to the GC. This
works fine
unless a reference to the GC memory is inserted into malloc'd
data,
which is why there's an API to the GC to let it know about
such things.
But if you do want to allow it, then my original problem comes
back. You have to scan the malloced memory because you are not
sure where that memory might contain pointers to GC managed
memory.
And the hybrid hybrid approach (i.e. - only some of the memory
allocated by malloc is scanned) is a wasp nest of potential
bugs and problems.
Shachar
Cool down, take a step back.
There are memory management technique that can give you good
result in most case, but will degenerate is few others. For
instance RC doesn't handle cycles, plays poorly with exceptions,
and so on.
There are ways to make RC work in all these case, but it is has
severe drawbacks. Now, if you allocate using a GC, and use RC on
top of it, you get 99% of the garbage cleaned up as you expect.
But it allows the RC system to just delegate to the GC for cases
it is not good at.
That way you get very occasional collection cycles to the point
where it is usually not a problem, and if you are smart about it,
you can even trigger them yourself at appropriate time. If 99% of
the garbage is cleanup up by the RC mechanism, the the garbage
accumulate at 1% the rate of what it would with a 100% GC system,
and, consequently, you can run collection 1/100 time what you
would with a pure GC system with the same memory overhead.
Now you may ask, how am I so sure that this is working great ?
The short answer is PHP.