On 24 Nov 2011, at 16:28, <andrew.benn...@ns.sympatico.ca> <andrew.benn...@ns.sympatico.ca > wrote:

At no point did the heap status reveal the growing amount of space tied up: the
only odd thing was that TotalAllocated sometimes came back negative in
the threads as the program approached the point of running out of memory
(at the 2GB addressing limit; the machine has 6GB).

The fact that the heap status counters are unreliable since the latest rewrite of the heap manager is a known problem:
* http://bugs.freepascal.org/view.php?id=15805
* http://bugs.freepascal.org/view.php?id=14315
* http://bugs.freepascal.org/view.php?id=15763

In the course of eliminating the workspace originally allocated as dynamic
arrays, I discovered 2 unmatched SetLength procedures. As I mentioned
above, these were never reported by HeapTrc.

That's because they don't cause memory leaks (except in case of direct pointer manipulations, but in that case crashes are more likely than memory leaks). Memory management for dynamic arrays and ansi/wide/ unicodestrings is automatic via (hidden) reference counting.

I've never seen any reports of heaptrc failing to report memory leaks. Most likely, your problems stem from internal heap fragmentation rather than from memory leaks. Such problems can usually be solved by using the "cmem" unit, which falls back to the default C library's memory manager (FPC's heap manager is generally faster, except in cases of lots of fragmentation).


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to