[fpc-pascal] FPC Heap Management : sub-allocation ?
Mark Morgan Lloyd
markMLl.fpc-pascal at telemetry.co.uk
Sat Nov 1 10:26:21 CET 2014
> Frederic Da Vitoria wrote> I think that Brian is asking if a memory leak could eat the system's> memory> irreversibly. IIUC in Windows, when the program is stopped, all it's> memory> is freed, even if the program leaked memory. I don't know about Linux, but> I'd be surprised if it weren't the same.> > -- > Frederic Da Vitoria> (davitof)> > Membre de l'April - « promouvoir et défendre le logiciel libre » -> http://www.april.org> > _______________________________________________> fpc-pascal maillist -
>> fpc-pascal at .freepascal
> Yes that is exactly what I was asking. For a high reliable system running24/7 my fear using Object Oriented code vs procedural code is exactly whatyou mentioned . If there is a serious leak , or even a small one for anextended period of time , it can take down the OS. I have seen this happenwith Sun OS and a 3rd party driver that leaked and caused the OS to crashafter an extended period of time.
An operating system certainly /shouldn't/ crash if user processes
allocate excessive memory. The overall system might thrash which would
make it unresponsive to e.g. new SSH sessions, but that's hardly the
I've got stuff here running 24/7 with uptime measured in months.
Historically, the memory leaks weren't in application code but were in
database backend stuff that managed its own heap, which made it very
difficult to monitor.
It's easy enough to code such that when you perform a complex activity
which /should/ free all memory on completion you check that it does so.
It's also easy enough to put something in your UI that reports how much
is currently on the heap, and if you see that it's growing you can
investigate in a development environment using e.g. HeapTrace.
In extremis, it's usually possible to get a program to restart itself if
something's obviously wrong. I don't know if it's still the case, but
Apache used to limit the number of requests each process would handle to
protect it from memory loss due to faulty CGI etc.
If necessary, you can use a custom heap manager e.g. if you don't want
it to expand beyond some preallocated size. In principle, you could code
yourself multiple heaps each with custom procedures/functions, but while
these might be useful for stuff that you're writing yourself you'll not
be able to use them with the standard OO classes.
I don't believe that there's an equivalent to mark/release in the
standard heap managers, and from discussion elsewhere I don't believe it
could be added in a compatible way. Some variant of Mark() that took a
parameter suggesting how much memory could be allocated could be useful,
but your focus should be on preventing leaks and runaway rather than
constantly recovering from them.
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk
[Opinions above are the author's, not those of his employers or colleagues]
More information about the fpc-pascal