On Monday, 7 October 2013 at 21:13:53 UTC, safety0ff wrote:
I think I've found the culprit: Memory managment / GC,
disabling the GC caused the program to eat up all my memory.
I'll have to look into this later.
From what I've gathered from
http://forum.dlang.org/thread/dbeliopehpsncrckd...@forum.dlang.org,
your use of enum makes it copy (and allocate) those variables on
each access.
Quoth Dmitry Olshansky in that thread (with its slightly
different context);
And the answer is - don't use ENUM with ctRegex.
The problem is that ctRegex returns you a pack of
datastructures (=arrays).
Using them with enum makes it behave as if you pasted them as
array literals and these do allocate each time.
Merely replacing all occurences of enum with immutable seems to
make a world of difference. I benched your main.d a bit on this
laptop (also i7, so 4 real cores + HT);
http://dpaste.dzfl.pl/a4ecc84f4
Note that inlining slows it down. I didn't verify its output, but
if those numbers are true then ldmd2 -O -release -noboundscheck
is a beast.