when you do a real free(), it frees up memory for any program to use
This is an extremely naive description of not only what the libc free() function does, but also of how memory management works in general.
This is an extremely naive description of not only what the libc free() function does, but also of how memory management works in general.
The free subroutine deallocates a block of memory previously allocated by the malloc subsystem. Undefined results occur if the Pointer parameter is not an address that has previously been allocated by the malloc subsystem, or if the Pointer parameter has already been deallocated. If the Pointer parameter is NULL, no action occurs.
All that is guaranteed, is a deallocation. Not how and when that memory will become available again.
Your "more detailed" understanding will break, and will cause headaches, on platforms ypu're not used to.