What are Memory Leaks?
When a program needs to store some temporary information
during execution, it can dynamically request a chunk of
memory from the system. However, the system has a fixed
amount of total memory available. If one application uses
up all of the system's free memory, then other
applications will not be able to obtain the memory that
they require. The implications of a "memory starved"
application can range from a graceful shutdown to an
unexpected crash. Most large scale applications regularly
request memory, so running out of system memory tends to
have a domino effect. Even if the applications do not
terminate, the system will slow down to a crawl-or even
hang-in low memory conditions. Clearly, none of these
results are desirable, so the system never wants to run
out-or run low-of memory.
It is the responsibility of each application to "free"
dynamically requested memory when they are finished using
it. Freeing the memory returns it to the system, where it
can be re-allocated to another application when needed.
When an application dynamically allocates memory, and
does not free that memory when it is finished using it,
that program has a memory leak. The memory is not being
used by the application anymore, but it cannot be used by
the system or any other program either.
Memory leaks add up over time, and if they are not
cleaned up, the system eventually runs out of memory.
Most everyone has seen the "Your computer is running low
of virtual memory" message box on Windows when memory
gets too high. It is typically accompanied by horribly
slow response time, and often the user can't even close
the wasteful application because of this sluggishness.
The only response at that point is to reboot the computer.
Memory leaks are bad on any system. For the automotive
platform, however, they become much more of a significant
problem. This is due to the following:
Applications stay in memory when not in use. Typically,
the operating system can clean up after a program which
leaks memory after it terminates. However, since we do
not allow the users to easily shut down automotive
applications, Windows CE cannot clean up after any ill-
behaved applications.
System run-time is expected to be unlimited. If all else
fails, a system reboot will clean up all memory leaks.
However, although we do support system reboots, our goal
is that the user will never need to do so. Since you do
not need to "reboot" your car stereo every few weeks
because it stops working, or because the performance
becomes poor, it is unacceptable to need to do so on the
automotive platform.
Systems typically have lower total available system
memory. Desktop applications can get away with being
sloppy with memory when they run on systems with 64
megabytes of RAM and more, and with large hard drives to
store swapped out virtual memory pages. But the
automotive platform may have only 16 megabytes total
memory, and that includes process and storage memory
together! In order words, that memory must store what
would be in RAM on a desktop PC, as well as what would be
on the hard drive. System memory is at a premium.