So, for my Win64 the formula determines memory allocation by GetMem(N): ((N div 32) + 1) * 32.
Generalized for heap.inc CPU32 / CPU64 and small blocks.
Minimum likely memory used for allocation : GetMem(N): ((N div SizeOf(UIntPtr) * 4 + 1) * SizeOf(UIntPtr)*4. I write "likely" because the memory allocator might return a freed block of a larger size.
In fact it is of no interest to us programmers to know that since we want N bytes.
Some routines in the rtl make good use of it, avoiding excessive calls to GetMem / FreeMem that could be avoided.
Why did I get interested in the subject ? Because when using cmem, MemSize returns exactly what was requested and I thought it was unfair regarding program speed. But actually my benchmarks regarding changing size of allocation (modifed FPC) to put cmem on par with heap.inc did not indicate a noticeable difference.