Mem Mgmt: With & Without the GC

Zane via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Aug 21 11:31:26 PDT 2016


On Sunday, 21 August 2016 at 16:38:09 UTC, Cauterite wrote:
> On Sunday, 21 August 2016 at 16:14:53 UTC, Zane wrote:
>> 5) Is there a way to do simple heap allocation with 'new' 
>> while ensuring the GC doesn't deallocate until I want it to?
>
> I can answer this at least,
> If you don't want the GC to ever collect the object itself, 
> here's the best way:
> Allocate the object with a non-GC allocator (such as 
> std.c.malloc ), then use `emplace` to construct the object in 
> that memory ( http://dlang.org/phobos/std_conv.html#.emplace ).

I see - That makes sense, but is there no way to "pause/stop" the 
GC, but still be able to use the 'new' syntax? I like how clear 
the syntax is, I just don't _always_ want the GC. I'm thinking of 
something like:

core.memory.GC.disable();
Obj o = new Obj();
/* ...use o... */
core.memory.GC.free(o); // or whatever

if possible, is there a drawback to this (other than no automatic 
GC) compared to say, malloc?

Regarding the marking, I guess my question is: what must be done 
to ensure something allocated with 'new' will be a candidate for 
auto-collection later (when GC is enabled)?


More information about the Digitalmars-d-learn mailing list