Es geht in dem Blog zwar um C++ und Spieleentwicklung, aber die technischen Informationen lassen sich auch in Delphi übertragen:
http://ithare.com/c-for-games-perfor...data-locality/
BTW, jeder unnötige string (vor allem die impliziten, die man so gar nicht mitbekommt) ist auch eine Heapallokierung.
Von daher macht es schon Sinn, diesbezüglich ein bisschen Bescheid zu wissen und sensibel zu sein.
Anekdote: Ich habe jüngst einen Rot-Schwarz-Baum implementiert. Die ursprüngliche Implementierung nutzte für die Knoten Objekte.
Einfach zu implementieren und man konnte schön Vererbung nutzen (TRedBlackTreeNode<T> <- TRedBlackTreeNode <- TBinaryTreeNode).
Das sorgte allerdings für elendigen Speicheroverhead durch den ganzen Klump, der bei Objekten so mit kommt.
Also lieber Records/Pointer - erste Implementierung mit New/Dispose. Weniger Speicher - gut.
Aber über Zeit Memoryfragmentierung (übrigens genauso wie bei Objekten) und somit zunehmende Cache misses.
Also den Speicher für die Records aus einem Array nehmen, so dass eine bessere Lokalität gegeben ist.