[Issue 7095] GC doesn't return or reuse unused memory [D2.056]
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Dec 11 10:38:42 PST 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7095
--- Comment #5 from David Simcha <dsimcha at yahoo.com> 2011-12-11 10:38:41 PST ---
(In reply to comment #4)
> Isn't GC has a flag that says if something may contains pointer or not ?
>
> Why this flag is set when allocation an array of long ?
It's not. If a bit pattern in `arr` would point into GC memory if interpreted
as a pointer, then the pattern is ignored. The GC has some level of precision
in that it knows whether a heap-allocated block contains any pointers or not.
However, the issue is that pointers **from** somewhere else point **at** arr,
keeping it alive incorrectly.
There are two sources for false pointers:
1. The stack, where the GC has no knowledge whatsoever of what's a pointer and
what isn't. I think this also applies to the static data segment.
2. Heap allocated data structures that contain both pointer and non-pointer
data, e.g.:
struct Foo {
void* ptr;
size_t num;
}
If you allocate a Foo on the heap, the whole block will be marked as
potentially containing pointers. The GC won't know what parts of it aren't
pointers. `num` could have a bit pattern that would be a valid pointer and
will keep some objects alive unnecessarily.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list