long compile time question
Maxim Fomin
maxim at maxim-fomin.ru
Wed Oct 24 08:39:45 PDT 2012
On Wednesday, 24 October 2012 at 09:50:38 UTC, Era Scarecrow
wrote:
> On Wednesday, 24 October 2012 at 04:49:19 UTC, 1100110 wrote:
>>> The following takes nearly three minutes to compile.
>>> The culprit is the line bar ~= B();
>>> What is wrong with this?
>
>> I have the same issue on linux x64 2.060
>>
>> So appending to a dynamic array isn't really that efficient.
>> But this goes WAY over that line. I'm timing your test now.
>>
>> It's still going...
>
> It appears it's all happening during copying init, why I am
> not sure.
>
> [code]
> struct B {
> enum SIZE = 1024 * 64;
> int[SIZE] x;
> }
>
> //same timing issue, no array involved
> void test(B b) {}
>
> void main() {
> test(B());
> }
> [/code]
>
> I've changed the *64 to various numbers and gotten curious
> results. The mb is the noted (estimated) memory footprint it
> used during compiling.
>
> 1: 0m0.725s mb:??
> 2: 0m1.414s mb:??
> 4: 0m2.620s mb:28
> 8: 0m8.937s mb:30
> 16: 0m35.869s mb:34
> 32: 2m36.922s mb:42
> 64: 9m27.353s mb:56
According to assembly dmd just generates repetitive instructions
to zero memory instead of making it in a loop. A workaround is to
initialize array to void and then zero it in a loop.
More information about the Digitalmars-d-learn
mailing list