Hey. Even a realloc (p,size), p could be anything.

That's not the point. A memory manager can recognize a pointer it gives by itself. And no, a memory manager cannot give addresses to stack zone, only heap zone, so any p not referencing any in heap it's detectable. And even if two memory managers are working (like a cmanager for a dll) you can mark your references.
We can think in pointer manipulation. And with a memory manager you could extend the syntax. For example Copypointer (p1,p2). But i insist, this is not the point too.
I think you are mainly thinking in Garbage Collector perhaps by some examples i've put. No, that's not (too) the point i try to explain (i'm sorry for my bad english). It can be used for many other things.
My main use it's not GC. It's debugging and teaching

. I can see better bad pointer usage (by any mistake or in a way we do not like) knowing p caller, specially with classes. Even if the memory manager does nothing different with memory allocation, only bookeeping. Or even enforcing programming styles. If i want to enforce a nil for non used pointers, i will like that my bookeeper memory manager process take note of with p's processes in In and Out. Even i could have these functionality with conditional compiler directives if well designed and normal mode if not compiler directive present.
The main issue (This is The Point), is that i am saying that actually the entry is a function and should be a procedure with p or a function with p in somewhere visible to know all variables for the memory manager to perform any actions (whatever the programmer desires) and knowing it in time it helps warn/bug/do things.
So if the p data is useful, then the data should be known -> THE POINT
And for 3rd party code and (mainly) the RTL i cannot see it because the function entry mask us the data. The RTL calls the memory manager and i only know what p is given, not what p is demanding (well, in classes i can do some dirty tricks with class constructors and create/after create methods, but these are other things not needed if you can see calling p and bad for elegant code...)
So, please, do not discuss about use. I'm pretty convinced it's useful. Or in the worst case, if you are not convinced (or i'm in error), never harmful (it can be ignored for all existing code, it's a feature for new code with can use it or ignoring it as now).
The solution is simple as hell:
When I write GetMem(P, Size); or P := GetMem(Size); compiler inserts a call to MemoryManager.GetMem(P,Size) and not P:=MemoryManager.GetMem(Size) as is doing now.
When compiler does RTL things (like new p, class instantiation), call the way above.
In Memory Manager Record, add the new calling method with redirecting code (In procedure memorymanager.getmen (p,size) call the old function entry as default implementation) and go. It should go ok without performance issues with compiler optimization. And if the new calling method (the procedural way) is intercepted, then it could be used to do some cool things.
What is the problem with this way? Old code should go ok in every case (even memory manager code like heaptrc) and the only thing i see is minor performance hit if compiler can't optimice it (and if compiler can't optimice a straight forward call, then i think it should be viewed why).
And if performance were an issue, a simple compiler directive (Let's be creative : $MemoryCallMethod) could do the task (if no directive all calls by old way, if new directive, with procedural way... that will affect only to non default memory manager code that can be bridged as posted)
And it even could be useful to see things that i do not like as pointer dealocation differences by platform.. (example disposeof here if i read it correctly->
http://forum.lazarus.freepascal.org/index.php/topic,42398.0.html)
So i do not see any bad thing, but some promissing good ones. Who said fear?
