On Apr 29, 2012, at 2:38 AM, Manu <turkey...@gmail.com> wrote:

> On 28 April 2012 18:16, Peter Alexander <peter.alexander...@gmail.com> wrote:
> On Saturday, 28 April 2012 at 09:14:51 UTC, SomeDude wrote:
> On Saturday, 28 April 2012 at 09:12:23 UTC, SomeDude wrote:
> 
> Real time guarantees on a GC is not something we are going to offer anytime 
> soon anyway. While a minimal library, loosely based on the C standard 
> library, with some more bells and whistles that could be borrowed from 
> Phobos, this is a goal that is achievable in a foreseeable future. And both 
> game developers and embedded programmers would be interested.
> 
> Note that Kenta Cho, who wrote fast games in D1, used this approach, and it 
> worked very well for him.
> 
> I also write games in D.
> 
> My approach is this: use the GC all you want during loading or other 
> non-interactive parts of the game and then just make sure that you don't use 
> it during gameplay.
> 
> GC vs. manual memory allocation is a non-issue for real-time guarantees. The 
> simple fact of the matter is that you should be using neither. I also don't 
> use malloc/free during runtime because it has the same non-real-time problems 
> as using the GC. A single malloc can stall for tens of milliseconds or more, 
> and that's simply too much.
> 
> Just learn how to write code that doesn't allocate memory.
> 
> A bigger problem with GC for games is memory management i.e. controlling how 
> much memory is currently allocated, and what systems are using what memory. 
> Having deterministic memory usage is preferable for those cases because I 
> know that as soon as I delete something that the memory is available for 
> something else. I don't get that guarantee with a GC.
> 
> I think that basically sums it up.
> 
> I'm interested to know is whether using a new precise GC will guarantee ALL 
> unreferenced stuff will be cleaned on any given sweep.
> I can imagine a model in games where I could:
>  1 Use the GC to allocate as much as I like during initialisation
>  2 During runtime you never allocate anyway, so disable the GC (this is when 
> it is important to know about hidden allocations)
>  3 During some clean-up, first run the logic to de-reference all things that 
> are no longer required
>  4 Finally, force a precise GC scan, which should guarantee that all 
> no-longer referenced memory would be cleaned up at that time.
> 
> This would actually be a very convenient working model for games. But it only 
> works if I know everything that was released will definitely be cleaned, 
> otherwise I may not be ale to allocate the next level (games often allocate 
> all memory a machine has within 100k or so).

For a use pattern like this, one thing that may work is to add a GC proxy 
immediately before loading a level. To unload the level, terminate that GC. 

Reply via email to