Just another question about memory management in d from a newbie

Thomas earthwormjimmy at gmx.at
Mon Jun 17 19:53:52 UTC 2019


Hello!

First my background: C++ and Java ages ago. Since then only 
PLSQL. Now learning D just for fun and personal education on time 
to time and very pleased about it :-)

Now I have to ask a question here, because I could not find a 
corresponding answer for it. Or I am unable to find it :-)

I was wondering about the memory system in D (and other C like 
languages) about the handling of the memory allocation overhead.

Just an example that I have seen many times:


int main()
{
     foreach(i;0 .. 10000)
     {
         int x;
         // do something with x
     }
     return 0;
}


Do I understand it right that the variable x will be created 
10000 times and destroyed at the end of the scope in each loop ? 
Or will it be 10000 overwritten by creation ?
I mean does it not cost the CPU some time to allocate (I know 
were talking here of nsec) but work is work. As far I know from 
my school days in assembler, allocation of memory is one of the 
most expensive instructions on the cpu. Activate memory block, 
find some free place, reserve, return pointer to caller, and so 
on..

In my opinion this version should perform a little better:

int main()
{
     int x;
     foreach(i;0 .. 10000)
     {
         x = 0; // reinitialize
         // do something with x
     }
     return 0;
}

Or do I miss something and there is an optimization by the 
compiler to avoid recreating/destroying the variable x 10000 
times ?

I know that version 1 is more secure because there will be no 
value waste after each loop we could stumble onto, but that is 
not my question here.
And I know that were talking about really small cpu usage 
compared to what an app should do. But when it is to look on 
performance like games or gui (and there are a lot of examples 
like version 1 out there) then I have to ask myself if it is not 
just a waste of cpu time ?

Or is it a styling of code thing ?

Thank you for your time!


Greetings from Austria
Thomas


More information about the Digitalmars-d-learn mailing list