The Memory-Optimization Hoax
RAM optimizers make false promises
Mark Russinovich - SysInternals
http://www.savefile.com/files/2002646
Virtual Memory in Windows XP.
http://www.aumha.org/win5/a/xpvm.htm
The Truth about Windows Memory Optimizers
http://www.bitsum.com/winmemboost.asp
MSDN - The Virtual Memory Manager in Windows NT
http://msdn.microsoft.com/en-us/library/ms810616.aspx
Fred Langa - "Memory Optimizer" Confusion
http://www.langa.com/newsletters/2004/2004-12-16.htm#2
To illustrate why an application cannot 'defrag the memory' of another application.
The virtual address space for a process is the set of virtual memory addresses that it can use. (ie. address space = the set of memory addresses)
The address space for each process is private and cannot be accessed by other processes unless it is shared. (ie. a "memory defrag" type program cannot access the memory of other programs that are running)
A virtual address (That a running program knows about) does not represent the actual physical location (which memory chip) of an object in memory; instead, the system maintains a page table for each process, which is an internal data structure used to translate virtual addresses into their corresponding physical addresses. Each time a thread references an address, the system translates the virtual address to a physical address. (ie. the program doesn't know or care about where the memory is physically coming from - it just sees a "pool" of memory)
IN ENGLISH (almost) - Windows deals with the physical storage and locations and types of memory. Windows hides this from all programs - and programs don't have to worry about it (and can't do anything anyway).
The Win32 Application (being the 'defrag program') cannot actually see what physical memory is allocated for itself (or any other process) - as the "NT Virtual Memory Manager" masks the physical allocation (ie. which memory chips the program is running on) - being "Physical Memory".
If an application cannot see which memory chips it is running from - or access/restructure/move virtual or physical memory of another process - it definitely cannot perform some sort of defragmentation.
----------------------
A type of fragmentation that can occur (very different to what is claimed to be fixed by the magic memory defraggers) is being addressed in some fashion by Microsoft and handled at the Virtual Memory Manager level. This is something that if it is a problem should really be dealt with by the application developers.
Configure memory manager to minimize memory fragmentation.
http://smallvoid.com/article/winnt-memory-decommit.html