Sharing in D

JAnderson ask at me.com
Thu Jul 31 23:14:29 PDT 2008


JAnderson wrote:
> Walter Bright wrote:
>> Sean Kelly wrote:
>>> All that said, I believe it's entirely possible to write 
>>> performance-critical code in D so long as the
>>> programmer is careful about memory allocation.  And as Walter has 
>>> said before, because even
>>> malloc is not time-constrained the same goes for any use of dynamic 
>>> memory--GCs just magnify
>>> the issue.  Server apps in Tango, for example, don't allocate any 
>>> memory at all once initialization
>>> is complete.  This is why they tend to be so blisteringly fast.  It's 
>>> also why Tango is designed the
>>> way it is--not always super-convenient for run of the mill apps 
>>> programming, but quite scalable
>>> for high-end work.  By contrast, I'd argue that Phobos is the opposite.
>>
>> I wrote a version of Empire (the game) in D that does no allocation at 
>> all. Therefore, the gc never runs and there is never any unbounded delay.
>>
>> The gc is never going to pop up out of nowhere and sink your 
>> application. A gc only happens when you request memory from the gc. 
>> For the real time constrained section of code, the idea is to 
>> pre-allocate all the data you'll need first, then do no allocation 
>> within the critical section.
>>
>> In fact, such critical code in C++ does this anyway because there are 
>> no bounded time constraints on C++ new either. C malloc has no bound 
>> constraints, either.
> 
> This is true, new in C++ can seriously degrade performance if not manage 
> properly.  However calling a couple of 100 smallish news in C++ per 
> frame is quite acceptable and has a infindecimal affect on performance, 
> when working on windows.

I should point out that I'm aware of fragmentation however you can still 
call new's in either a way that doesn't fragment, or simply rely on 
paging to fix the problem.  If your not creating a program that needs to 
run longer then a month (ie maybe your game has a maximum time limit of 
30 minutes or something) then the problem is even less of an issue.  If 
you are, make sure you understand fragmentation.

> 
> D however is another kettle of fish.  You can't have any allocations 
> during the active part of the game.  You have to do it all a load 
> points.  Why? Because at some point the memory allocator will runout of 
> free memory and then it will need to clear anything that's unused. 
> Normally this wouldn't be a problem however it takes over a frame to 
> flush; and that leads to a very noticeable stutter.
> 
> Now I haven't tried realtime programming with allocations in the 
> realtime part for a while so things might have changed however that's 
> how it was the last time I was playing around with that stuff.  Also I 
> haven't tried Tangos.
> 
> Also nedmalloc can give a huge performance boost to windows allocation 
> making it almost as good as preallocations. Sometimes its better due to 
> memory locality which reduce cache misses.
> 
> The great thing about D's GC though its that other people can implement 
> there own.  I hope that when someone comes up with a really good one and 
> it will become part of the main distribution (ie not become another 
> windows malloc mess).
> 
> -Joel



More information about the Digitalmars-d mailing list