Firstly, I am a bit confused by the terminology: why is there some kind of memory allocated by FastMM and some “system-reserved” (and reserved) memory? Since FastMM is a memory manager, why is the system responsible for allocating some memory?
Where do you think FastMM gets memory allocation? Of course, this comes from the system.
When the application starts, FastMM receives a block of memory from the system. When you request the use of some memory (using GetMem, New, or TSomething.Create), FastMM tries to pass it to you from this first start block. If this is not enough, FastMM requests more (in one block, if possible) from the system, and returns part of this to you. When you free something, FastMM does not return this memory to the OS, because it shows that you will use it again. It just means that it is not used internally. He is also trying to rebuild unused blocks so that they are as contiguous as possible, so as to try not to return to the OS for more unnecessary use. (However, this reorganization is not always possible, and in the case when you finish the fragmentation of memory with such things as multiple resizing of dynamic arrays, many objects create and free, etc.)
In addition to the memory that FastMM manages in your application, the system allocates space for the stack and heap. Each process receives a mega stack of space when it starts, as a place to place variables. This stack (and heap) can dynamically grow as needed.
When your application shuts down, all of the allocated memory is returned to the OS. (Perhaps this is not so immediately in the task manager, but it is.)
Is it possible, for example, to get a report, average execution, similar to what FastMM generates when the application closes?
As far as I can judge. Since FastMM stores it somewhere, this does not necessarily mean that there is access to it at runtime from outside the memory manager. You can look at the source of FastMMUsageTracker to find out how the information is retrieved (using GetMemoryManagerState and GetMemoryMap in the RefreshSnapshot method). A source is also available for FastMM4; You can see which public methods are available.
FastMM’s own documentation (in the form of readme files, FastMMOOptions.inc comments and FastMM4_FAQ.txt file) is somewhat useful in explaining how it works and what debugging options (and information) are available.