GC-less tutorial?

Artur Skawina art.08.09 at gmail.com
Sat Apr 7 10:30:48 PDT 2012


On 04/07/12 17:25, Tove wrote:
> Hi,
> 
> are there any good tutorials for using D totally without GC, detailing some common pitfalls?
> 
> One thing on my wishlist would be a way to detect accidental GC allocations resulting from side-effects of every-day operations... generating linking errors would be sufficient for detecting this...

One problem with this is that the runtime wants to alloc some things before your
code gets to run - so you can't just remove the functions from the build. You're
left with either modifying the runtime or somehow ignoring the initial allocations
(which usually won't cause any problems). If using a custom RT would have been an
option you wouldn't be asking these questions (as you could just omit the symbols),
so...

If your platform supports gdb, try creating a text file "trapallocs" containing:

b gc_malloc
b gc_qalloc
b gc_calloc
b gc_realloc
b gc_extend

then run "gdb -x ./trapallocs -ex run --args ./your_app"

The debugger will stop at the first allocation and you can then use "bt"
to check what's going on, then "c" to skip to the next alloc. The first few
will come from the runtime and various module ctors, but anything after
that will be caused by your code, directly or indirectly.

You can also trap just the array ops with eg:

b _d_arraycatT
b _d_arraycatnT
b _d_arrayappendT
b _d_arrayappendcTp
b _d_newarrayT

etc 

Once the runtime becomes a shared library simpler solutions will be possible,
but, until then, it doesn't get much better than this. You need some way to 
determine which allocations are "legal" and which are not; doing this w/o
a custom runtime is probably not worth the effort...

And, yes, the initial runtime allocations could (and should) me made to use a
different path; some of them shouldn't happen at all. For example std.datetime
alone causes two allocs via _d_newclass, in every D app that imports std.stdio...


artur


More information about the Digitalmars-d-learn mailing list