On Saturday, 22 June 2013 at 21:41:15 UTC, Walter Bright wrote:
Compiling std.algorithm for unittests consumes all the memory on many machines. I've been looking into what is allocating all that memory, and it isn't so easy without adding instrumentation code anywhere.

Anyone know of a convenient tool to do this on Linux?

(valgrind just hangs, or at least I gave up on it after 6 hours)

I did a check on the CTFE part of it. You can do this by setting SHOWPERFORMANCE to 1 in the top of interpret.c. This produces:

$ dmd -c -unittest std.algorithm
        ---- CTFE Performance ----
max call depth = 20     max stack = 63
array allocs = 356      assignments = 45356

That's actually not so terrible. The number of assignments gives a rough idea of how many CTFE statements are executed (almost everything interesting is an assignment). Most of the assignments are IntegerExpressions, of about 8 bytes, so it's under a megabyte in total. Note that there are very few array allocations, they are the thing that can really chew up memory quickly in CTFE.

So although CTFE generally leaks memory like the Exxon Valdez leaks oil, I don't think it's to blame in this particular case.

Reply via email to