www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - What if gc.disable at all

reply Sam Hu <samhudotsamhu gmail.com> writes:
Greeting to everybody,

If this is too silly a question,please just ignore it.

I was wondering what if GC is turned off during the lifetime of the
application?Just as if D is a better,safer/unsafer C with class?Can't work?Or
some special stuff need to handle?

Thanks for your help in advance.
Regards,
Sam
Sep 23 2009
next sibling parent reply Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
On Wed, Sep 23, 2009 at 8:14 AM, Sam Hu <samhudotsamhu gmail.com> wrote:
 Greeting to everybody,

 If this is too silly a question,please just ignore it.

 I was wondering what if GC is turned off during the lifetime of the
application?Just as if D is a better,safer/unsafer C with class?Can't work?Or
some special stuff need to handle?

 Thanks for your help in advance.
 Regards,
 Sam
You can do it. You have to avoid some features - setting array length, concatenating/appending arrays, using associative arrays in any way - but other than that it works fine. One thing you'll notice though is that D1 makes it very difficult to do any kind of automated manual memory management. D2 at least gives you struct destructors and postblits, which makes writing something like a C++ smart_ptr within reach.
Sep 23 2009
parent Sam Hu <samhudotsamhu gmail.com> writes:
Thank you all for your help!

Regards,
Sam
Sep 23 2009
prev sibling parent reply BCS <none anon.com> writes:
Hello Sam,

 Greeting to everybody,
 
 If this is too silly a question,please just ignore it.
 
 I was wondering what if GC is turned off during the lifetime of the
 application?Just as if D is a better,safer/unsafer C with class?Can't
 work?Or some special stuff need to handle?
 
There are some parts of D (like AA) that allocate memory from the GC but for which it would be hard to impossible for the programmer to tell when to deallocate. If you use these features while the GC is off, you will leak memory untill you turn it back on (at that point the GC will clean it up). In some short lived programs this is no problem.
 Thanks for your help in advance.
 Regards,
 Sam
Sep 23 2009
parent reply Tom S <h3r3tic remove.mat.uni.torun.pl> writes:
BCS wrote:
 Hello Sam,
 
 Greeting to everybody,

 If this is too silly a question,please just ignore it.

 I was wondering what if GC is turned off during the lifetime of the
 application?Just as if D is a better,safer/unsafer C with class?Can't
 work?Or some special stuff need to handle?
There are some parts of D (like AA) that allocate memory from the GC but for which it would be hard to impossible for the programmer to tell when to deallocate. If you use these features while the GC is off, you will leak memory untill you turn it back on (at that point the GC will clean it up). In some short lived programs this is no problem.
As for AAs, you should be able to replace them with Tango's tango.util.container.HashMap with the tango.util.container.Container.Container.Malloc (or .Chunk) allocator. It might be tricky to find memory leaks due to accidental GC usage, but you could e.g. hook the GC methods ( http://dsource.org/projects/kong ) (or modify the GC) and print stack traces in them. -- Tomasz Stachowiak http://h3.team0xf.com/ h3/h3r3tic on #D freenode
Sep 24 2009
parent reply Sam Hu <samhudotsamhu gmail.com> writes:
Tom S Wrote:

 As for AAs, you should be able to replace them with Tango's 
 tango.util.container.HashMap with the 
 tango.util.container.Container.Container.Malloc (or .Chunk) allocator.
 
 It might be tricky to find memory leaks due to accidental GC usage, but 
 you could e.g. hook the GC methods ( http://dsource.org/projects/kong ) 
 (or modify the GC) and print stack traces in them.
 
 
 -- 
 Tomasz Stachowiak
 http://h3.team0xf.com/
 h3/h3r3tic on #D freenode
Ah yes,I once translated most of Tango's tango.util.container.* into D2 excluding one or two modules which heavily depends on Tango other modules.It get compiled.However,the test program crashed with below error message: Error 42:Symbol Undefined _D5tango4core6Memory2GC6addrOfFpvZPv ---errorlevel 1 I have no clue what this means and where to restart. Regards, Sam
Sep 24 2009
parent reply Daniel Keep <daniel.keep.lists gmail.com> writes:
Sam Hu wrote:
 Ah yes,I once translated most of Tango's tango.util.container.* into D2
excluding one or two modules  which heavily depends on Tango other modules.It
get compiled.However,the test program crashed with below error message:
 Error 42:Symbol Undefined _D5tango4core6Memory2GC6addrOfFpvZPv 
 ---errorlevel 1 
 
 I have no clue what this means and where to restart.
 
 Regards,
 Sam
How about by reading the error message? Error 42:Symbol Undefined _D5tango4core6Memory2GC6addrOfFpvZPv --> Error 42:Symbol Undefined void* tango.core.Memory.GC.addrOf(void*) Ergo, you didn't link in tango.core.Memory, which it wants.
Sep 24 2009
parent Sam Hu <samhudotsamhu gmail.com> writes:
Daniel Keep Wrote:
 How about by reading the error message?
 
 Error 42:Symbol Undefined _D5tango4core6Memory2GC6addrOfFpvZPv
 
 -->
 
 Error 42:Symbol Undefined void* tango.core.Memory.GC.addrOf(void*)
 
 Ergo, you didn't link in tango.core.Memory, which it wants.
Thanks a lot.But may I ask...so I have to use Tango's runtime in D2 other than D2's runtime,or,to use both? Regards, Sam
Sep 25 2009