(* Homepage: https://github.com/pleriche/FastMM4 License: This work is copyright Professional Software Development / Pierre le Riche. It is released under a dual license, and you may choose to use it under either the Mozilla Public License 1.1 (MPL 1.1, available from http://www.mozilla.org/MPL/MPL-1.1.html) or the GNU Lesser General Public License 2.1 (LGPL 2.1, available from http://www.opensource.org/licenses/lgpl-license.php). If you find FastMM useful or you would like to support further development, a donation would be much appreciated. My banking details are: Country: South Africa Bank: ABSA Bank Ltd Branch: Somerset West Branch Code: 334-712 Account Name: PSD (Distribution) Account No.: 4041827693 Swift Code: ABSAZAJJ My PayPal account is: bof@psd.co.za Contact Details: My contact details are shown below if you would like to get in touch with me. If you use this memory manager I would like to hear from you: please e-mail me your comments - good and bad. Snailmail: PO Box 2514 Somerset West 7129 South Africa E-mail: plr@psd.co.za Acknowledgements (for version 4): - Eric Grange for his RecyclerMM on which the earlier versions of FastMM were based. RecyclerMM was what inspired me to try and write my own memory manager back in early 2004. - Primoz Gabrijelcic for several bugfixes and enhancements. - Dennis Christensen for his tireless efforts with the Fastcode project: helping to develop, optimize and debug the growing Fastcode library. - JiYuan Xie for implementing the leak reporting code for C++ Builder. - Sebastian Zierer for implementing the OS X support. - Pierre Y. for his suggestions regarding the extension of the memory leak checking options. - Hanspeter Widmer for his suggestion to have an option to display install and uninstall debug messages and moving options to a separate file, as well as the new usage tracker. - Anders Isaksson and Greg for finding and identifying the "DelphiIsRunning" bug under Delphi 5. - Francois Malan for various suggestions and bug reports. - Craig Peterson for helping me identify the cache associativity issues that could arise due to medium blocks always being an exact multiple of 256 bytes. Also for various other bug reports and enhancement suggestions. - Jarek Karciarz, Vladimir Ulchenko (Vavan) and Bob Gonder for their help in implementing the BCB support. - Ben Taylor for his suggestion to display the object class of all memory leaks. - Jean Marc Eber and Vincent Mahon (the Memcheck guys) for the call stack trace code and also the method used to catch virtual method calls on freed objects. - Nahan Hyn for the suggestion to be able to enable or disable memory leak reporting through a global variable (the "ManualLeakReportingControl" option.) - Leonel Togniolli for various suggestions with regard to enhancing the bug tracking features of FastMM and other helpful advice. - Joe Bain and Leonel Togniolli for the workaround to QC#10922 affecting compilation under Delphi 2005. - Robert Marquardt for the suggestion to make localisation of FastMM easier by having all string constants together. - Simon Kissel and Fikret Hasovic for their help in implementing Kylix support. - Matthias Thoma, Petr Vones, Robert Rossmair and the rest of the JCL team for their debug info library used in the debug info support DLL and also the code used to check for a valid call site in the "raw" stack trace code. - Andreas Hausladen for the suggestion to use an external DLL to enable the reporting of debug information. - Alexander Tabakov for various good suggestions regarding the debugging facilities of FastMM. - M. Skloff for some useful suggestions and bringing to my attention some compiler warnings. - Martin Aignesberger for the code to use madExcept instead of the JCL library inside the debug info support DLL. - Diederik and Dennis Passmore for the suggestion to be able to register expected leaks. - Dario Tiraboschi and Mark Gebauer for pointing out the problems that occur when range checking and complete boolean evaluation is turned on. - Arthur Hoornweg for notifying me of the image base being incorrect for borlndmm.dll. - Theo Carr-Brion and Hanspeter Widmer for finding the false alarm error message "Block Header Has Been Corrupted" bug in FullDebugMode. - Danny Heijl for reporting the compiler error in "release" mode. - Omar Zelaya for reporting the BCB support regression bug. - Dan Miser for various good suggestions, e.g. not logging expected leaks to file, enhancements the stack trace and messagebox functionality, etc. - Arjen de Ruijter for fixing the bug in GetMemoryLeakType that caused it to not properly detect expected leaks registered by class when in "FullDebugMode". - Aleksander Oven for reporting the installation problem when trying to use FastMM in an application together with libraries that all use runtime packages. - Kristofer Skaug for reporting the bug that sometimes causes the leak report to be shown, even when all the leaks have been registered as expected leaks. Also for some useful enhancement suggestions. - Günther Schoch for the "RequireDebuggerPresenceForLeakReporting" option. - Jan Schlüter for the "ForceMMX" option. - Hallvard Vassbotn for various good enhancement suggestions. - Mark Edington for some good suggestions and bug reports. - Paul Ishenin for reporting the compilation error when the NoMessageBoxes option is set and also the missing call stack entries issue when "raw" stack traces are enabled, as well as for the Russian translation. - Cristian Nicola for reporting the compilation bug when the CatchUseOfFreedInterfaces option was enabled (4.40). - Mathias Rauen (madshi) for improving the support for madExcept in the debug info support DLL. - Roddy Pratt for the BCB5 support code. - Rene Mihula for the Czech translation and the suggestion to have dynamic loading of the FullDebugMode DLL as an option. - Artur Redzko for the Polish translation. - Bart van der Werf for helping me solve the DLL unload order problem when using the debug mode borlndmm.dll library, as well as various other suggestions. - JRG ("The Delphi Guy") for the Spanish translation. - Justus Janssen for Delphi 4 support. - Vadim Lopushansky and Charles Vinal for reporting the Delphi 5 compiler error in version 4.50. - Johni Jeferson Capeletto for the Brazilian Portuguese translation. - Kurt Fitzner for reporting the BCB6 compiler error in 4.52. - Michal Niklas for reporting the Kylix compiler error in 4.54. - Thomas Speck and Uwe Queisser for German translations. - Zaenal Mutaqin for the Indonesian translation. - Carlos Macao for the Portuguese translation. - Michael Winter for catching the performance issue when reallocating certain block sizes. - dzmitry[li] for the Belarussian translation. - Marcelo Montenegro for the updated Spanish translation. - Jud Cole for finding and reporting the bug which may trigger a read access violation when upsizing certain small block sizes together with the "UseCustomVariableSizeMoveRoutines" option. - Zdenek Vasku for reporting and fixing the memory manager sharing bug affecting Windows 95/98/Me. - RB Winston for suggesting the improvement to GExperts "backup" support. - Thomas Schulz for reporting the bug affecting large address space support under FullDebugMode, as well as the recursive call bug when attempting to report memory leaks when EnableMemoryLeakReporting is disabled. - Luigi Sandon for the Italian translation. - Werner Bochtler for various suggestions and bug reports. - Markus Beth for suggesting the "NeverSleepOnThreadContention" option. - JiYuan Xie for the Simplified Chinese translation. - Andrey Shtukaturov for the updated Russian translation, as well as the Ukrainian translation. - Dimitry Timokhov for finding two elusive bugs in the memory leak class detection code. - Paulo Moreno for fixing the AllocMem bug in FullDebugMode that prevented large blocks from being cleared. - Vladimir Bochkarev for the suggestion to remove some unnecessary code if the MM sharing mechanism is disabled. - Loris Luise for the version constant suggestion. - J.W. de Bokx for the MessageBox bugfix. - Igor Lindunen for reporting the bug that caused the Align16Bytes option to not work in FullDebugMode. - Ionut Muntean for the Romanian translation. - Florent Ouchet for the French translation. - Marcus Mönnig for the ScanMemoryPoolForCorruptions suggestion and the suggestion to have the option to scan the memory pool before every operation when in FullDebugMode. - Francois Piette for bringing under my attention that ScanMemoryPoolForCorruption was not thread safe. - Michael Rabatscher for reporting some compiler warnings. - QianYuan Wang for the Simplified Chinese translation of FastMM4Options.inc. - Maurizio Lotauro and Christian-W. Budde for reporting some Delphi 5 compiler errors. - Patrick van Logchem for the DisableLoggingOfMemoryDumps option. - Norbert Spiegel for the BCB4 support code. - Uwe Schuster for the improved string leak detection code. - Murray McGowan for improvements to the usage tracker. - Michael Hieke for the SuppressFreeMemErrorsInsideException option as well as a bugfix to GetMemoryMap. - Richard Bradbrook for fixing the Windows 95 FullDebugMode support that was broken in version 4.94. - Zach Saw for the suggestion to (optionally) use SwitchToThread when waiting for a lock on a shared resource to be released. - Everyone who have made donations. Thanks! - Any other Fastcoders or supporters that I have forgotten, and also everyone that helped with the older versions.