dsimcha wrote:
== Quote from Denis Koroskin (2kor...@gmail.com)'s article
On Fri, 20 Nov 2009 17:28:07 +0300, dsimcha <dsim...@yahoo.com> wrote:
== Quote from Travis Boucher (boucher.tra...@gmail.com)'s article
dsimcha wrote:
== Quote from Travis Boucher (boucher.tra...@gmail.com)'s article
Sean Kelly wrote:
 Its harder
to create a memory leak in D then it is to prevent one in C.
void doStuff() {
    uint[] foo = new uint[100_000_000];
}

void main() {
    while(true) {
        doStuff();
    }
}

Hmm, that seems like that should be an implementation bug.  Shouldn't
foo be marked for GC once it scope?  (I have never used new on a
primitive type, so I don't know)
It's conservative GC.  D's GC, along with the Hans Boehm GC and probably
most GCs
for close to the metal languages, can't perfectly identify what's a
pointer and
what's not.  Therefore, for sufficiently large allocations there's a high
probability that some bit pattern that looks like a pointer but isn't
one will
keep the allocation alive long after there are no "real" references to
it left.
Aren't uint array allocations have hasPointers flag set off? I always
thought they aren't scanned for pointers (unlike, say, void[]).

Right, but they can still be the target of false pointers.  In this case, false
pointers keep each instance of foo[] alive, leading to severe memory leaks.

But the issue is more of a GC implementation issue then a language issue, correct? Or is this an issue of all lower level language garbage collectors?

I do not know much about GC, just basic concepts.

Reply via email to