Managing memory usage at Compile Time with DMD

Vladimir Panteleev via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Apr 9 02:56:46 PDT 2015


On Thursday, 9 April 2015 at 09:49:39 UTC, wobbles wrote:
> So, I'm writing a poker AI bot. The idea was to generate a 
> lookup table of all the poker hands using CTFE so runtime can 
> be as quick as possible (as the bot has a very small amount of 
> time to act).
>
> There are a LOT of calculations though, many millions of 
> combinations.
>
> During complation, this is consuming inordinate amounts of 
> memory, 16GB+ (which is all the RAM on my machine + some swap 
> space).

Unfortunately, the current implementation of CTFE is not very 
memory-friendly. This is being worked on.

> I'm wondering is there any techniques to freeing some memory 
> used by the compiler so it can be reused?
> Are malloc and free usable at compile time maybe?

No, they are not.

> Another possibilty I was looking at was to write a tool that 
> will spit out all combinations at runtime, and then import 
> these back into the bot at compile time to build a lookup table 
> that way.

This is probably the most practical solution for the time being. 
Some advice:

1. writeln, format and friends print most values (e.g. arrays) in 
a syntax close to D's, which means you should be able to take the 
output and paste it into a D program.

2. You can use import expressions and mixin expressions to import 
constant values from files:

http://dlang.org/expression.html#ImportExpression
http://dlang.org/expression.html#MixinExpression


More information about the Digitalmars-d-learn mailing list