Grundregel: Nehmt NIEMALS VirtualAlloc, sofern ihr keinen eigenen Speichermanager implementieren wollt! VirtualAlloc kann Speicher nur seitenweise anfordern. Wenn man also 16 Byte braucht und VirtualAlloc bemüht, werden 4096 Byte angefordert - es werden also nur 1/256 des Speichers benutzt.
Bei Delphi ist es eigentlich gleich, welche Methode zum Allozieren des Speichers verwendet werden, da alles letztlich auf den Speichermanager zurückgeführt wird - also egal, ob New, GetMem, AllocMem, SetString, StrAlloc usw. Windows bietet drei weitere Methoden an: Die Heap-Funktionen, die Local-Funktionen und die Global-Funktionen. Local- und Global-Funktionen sind veraltet und sollten normalerweise nur verwendet werden, wenn in irgendeiner Dokumentation steht, dass sie verwendet werden sollen.
Insgesamt heißt das, dass für Speicheranforderung aus einem Pool nur der Delphi-Speichermanager und die Heap-Funktionen zur Verfügung stehen.
Zuguterletzt gibt es natürlich noch die Speicherfunktionen von
COM, aber damit kenne ich mich wirklich nicht aus.