My point was that if the memory footprint of engine objects would be random ptr_remove wouldn't be able to free them because it had no idea how large the area to be released was.
No thats wrong, even the most basic memorymanagement works like this:
struct MemBlock{
uint Mem_StartAdress
uint Mem_Length
}MemBlock;
The returned pointer has the adress inside the evaluated StartAdress, and memoryallocation is a list of those blocks. and when you free memory, you search for the memblock with the given startadress. You dont need to know the length of the memory you reserved, because the MManagement takes care of it.