Am I do something wrong

Christopher Wright dhasenan at gmail.com
Thu Sep 13 05:59:51 PDT 2007


Eric Suen wrote:
> Hi,
> 
>   I write a very simple program, two version,
> one is write in D, and others is using C, the D version
> is extreme slow, the D version using 450 ms, but C version
> using 0 ms, can anybody tell me is there anything wrong
> in the code?
> 
> Here is the code:
> http://files-upload.com/files/499789/test.zip

The compile time is also insanely long.

If you just remove 'const' from those giant arrays (you'll have to 
assign base_action in your static constructor), you get a giant speed 
boost, both in compilation and in run time.

Looking at the assembly, constant expansion means that your tAction 
function maps to 28000 lines of assembly if you have const arrays, or 
about fifteen if you have non-const arrays. Constant expansion of arrays 
is an optimization for small arrays, but this is slightly ridiculous.

But the speed improvement from omitting 'const' puts the D version on 
par with the C. And if you want to get both the speed and the constness, 
I think you can have the giant array literals be private and mutable, 
and then expose some public const arrays that your static constructor 
sets as references to the private ones. (You can certainly do it in D2. 
Not sure about D1.)


More information about the Digitalmars-d-learn mailing list