SmartHeap ist ein Memory-Manager für den dynamischen Speicher, der effizient
Speicher allokiert und verwaltet.
SmartHeap ist in drei Konfigurationen erhältlich:
SmartHeap - die Standard SmartHeap Library für multithreaded Anwendungen auf Single Prozessoren oder singlethreaded Anwendungen auf beliebig vielen Prozessoren.
SmartHeap for Multi-Core - NEU! Nutzt die Vorteile von mehreren Prozessoren, die in einer physikalischen CPU enthalten sind. Dies kann zu dramatischen Verbesserungen der Performance bei heap-intensiven multi-threaded Anwendungen führen.
SmartHeap for SMP - ist besonders optimiert für Systeme mit mehreren Prozessoren, einschließlich Multi-core, aber ganz speziell für Systeme mit zwei oder mehr physikalischen CPUs.
SmartHeap ersetzt die Routinen für die dynamische Speicherverwaltung der Laufzeitbibliothek
des Compilers.
Gerade in C/C++ Applikationen, die auf Systemen mit virtueller Speicherverwaltung
laufen, wird die Geschwindigkeit, mit der dynamischer Speicher allokiert/deallokiert
wird, zum kritischen Faktor. Benchmarks belegen, daß SmartHeap's Algorithmen
bis zu 100-mal schneller arbeiten als die Funktionen der Laufzeitbibliotheken.
SmartHeap verhindert zuverlässig die Fragmentierung des Heaps, die vor allem
die Performance des Allokators beeinflußt.
Dazu verwendet es einen Allokator, der in Abhängigkeit von der Größe des angeforderten
Speicherblocks verschiedene Algorithmen verwendet. Dies geschieht transparent,
d.h. Sie als Programmierer müssen lediglich die SmartHeap-Library linken,
um diese Funktionalität nutzen zu können.
Aber SmartHeap bietet auch die Möglichkeit des "Fein-Tunings": Sie
können z.B. eigene Memory-Pools anlegen, die eine größere Lokalität aufweisen.
Allokation und Deallokation in solchen Memory-Pools sind wesentlich schneller
als Allokation und Deallokation im allgemeinen Heap.
SmartHeap verfügt darüberhinaus über einen sehr leistungsfähigen Debug-Modus.
Wenn die Debug-Version von SmartHeap einen Speicherblock allokiert, werden
folgende Informationen gespeichert:
Die SmartHeap-Funktion, die das Objekt erzeugt hat (z.B. malloc).
Dateiname, Zeilennummer und ein Zähler wo das Objekt erzeugt wurde. Diese
Information erlaubt es Breakpoints auf den n-ten Durchlauf einer Allokation zu setzen.
Einen eindeutigen Zähler, der es erlaubt, jede Allokation von allen anderen
Allokationen in einem Prozess zu unterscheiden.
Die angeforderte Größe und alle Flags.
Eine Checksumme, falls der Speicherblock read-only angefordert wurde.
Mit diesen Informationen können Sie Leaks und andere Speicherfehler
leicht entdecken