Re: C is too old? opinions?
- From: "Rob Thorpe" <robert.thorpe@xxxxxxxxxxxx>
- Date: 13 Jul 2006 14:01:19 -0700
Rob Thorpe wrote:
W Marsh wrote:
On Thu, 13 Jul 2006 11:53:06 -0700, "Dann Corbit" <dcorbit@xxxxxxxxx>
I think you have a reading comprehension problem.
You were lumping Java and .NET together, suggesting that they were
inadequate in real-time systems for the same reason.
Go on then - I would like to know how garbage collection affects
Many programming languages are unsuitable for real time
programming due to their non-deterministic nature. For example,
languages that have a built-in garbage collector are very problematic
because the garbage collector might "wake up" at the wrong moment,
halting all other operations until it finishes. A real time software
application that controls the amount of fuel supplied to an airplane's
engine at lift off cannot be interrupted by a garbage collector, not
This isn't really true of programming langauges but of implementations.
I is quite possible to write a garbage collector that does not cause
pauses. Some Java micro-edition implementations use them so they can
be used for real-time purposes.
Most normal implementations of Garbage collection that come with normal
tools occasionally cause a "pause" or "world-stop". These methods are
used because they are more efficient in overall cycles than continuous
Now I'm really curious; how does the garbage collector run
in deterministic time? Is it possibly a case of running the gc
after every X operations knowing that no more than Y
memory has to be released and that doing that will require
no more than Z time?
Sort of. The algorithm is obscure I can only find a few references to
The principle is simple though: Every operation that allocates one
block must be followed by an operation that can deallocate at least one
block of garbage if it is there. If this criteria is met then there is
no need to stop to GC, the amount of garbage stays fixed at some level
X. Memory usage can only expand out of control if that's what the
program does - which would happen with any memory allocation strategy.
I can only find one reference on the net right now. It is written by
Henry Baker decades ago in terms of prehistoric lisp and BCPL. Not the
easiest read ...