GC-less tutorial?

Tove tove at fransson.se
Sun Apr 8 07:17:29 PDT 2012


On Saturday, 7 April 2012 at 17:31:02 UTC, Artur Skawina wrote:
> 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

great, thanks for the hint, I didn't think of using breakpoints 
at first... but you are right, given good enough unit tests, the 
coverage would be sufficient!



More information about the Digitalmars-d-learn mailing list