On Saturday, 25 May 2013 at 01:26:19 UTC, Manu wrote:
Freeing is a no-realtime-cost operation, since memory management is usually
scheduled for between-scenes, or passed to other threads.
And I've never heard of a major title that uses smart pointers, and assigns
them around the place at runtime.
I'm accustomed to memory management having a virtually zero cost at runtime. So I don't think it's biased at all (in the sense you say), I think I'm
being quite reasonable.


Same goes for the GC, if you don't allocate, it wont trigger.


How much floating garbage? This might be acceptable... I don't know enough
about it.


It about how much garbage you produce while the GC is collecting. This won't be collected before the next cycle. You say you don't generate a lot of garbage, so the cost should be pretty low.

That is a easy way to export a part of the load in another thread,
improving concurrency in the application with little effort.


Are you saying a concurrent GC would operate exclusively in another thread?
How does it scan the stack of all other threads?

With real time constraint, a memory overhead is better than a pause.


Yes, it imply a pause to scan stack/registers, but then the thread can live it's life and the heap get scanned/collected. You never need to stop the world.

I wouldn't necessarily agree. Depends on the magnitude of each.
What sort of magnitude are we talking?
If you had 64mb of ram, and no virtual memory, would you be happy to
sacrifice 20% of it? 5% of it?


They are so many different variations here with each pro and cons. Hard to give some hard numbers. In non VM code, you have basically 2 choices : - Tax on every pointer write and check a flag to know if some operations are needed. if the flag is true, you mark the old value as a root to the GC. - Only while collecting using page protection (seems like a better option for you as you'll not be collecting that much). The cost is way higher when collecting, but it is free when you aren't.

Right. But what's the overhead of a scan process (that's almost entirely
redundant work)?

Roughly proportional to the live set of object you have. It is triggered when your heap grow past a certain limit.

Reply via email to