mimalloc für C++: Hochleistungs-Speicher-Allokator
In der modernen C++-Entwicklung ist das Speichermanagement eine der zentralen Aufgaben, die die Anwendungsleistung beeinflusst. Der Standard-Allokator (malloc von glibc oder jemalloc) ist oft überfordert, wenn es um hohe Lasten in Multithread-Umgebungen oder um die intensive Zuweisung/Freigabe kleiner Blöcke geht. mimalloc (kurz für "microsoft mimalloc") ist ein kompakter, aber extrem schneller Allzweck-Allokator, der von Microsoft Research entwickelt wurde. Er liefert beeindruckende Ergebnisse: bis zu 2-3 Mal schneller als malloc in Multithread-Szenarien und mit deutlich geringerem Speicherverbrauch.
Warum mimalloc verwenden? Erstens ist es für moderne Mehrkernprozessoren optimiert: Es nutzt Thread-lokale Caches und minimiert Konflikte um globale Sperren. Zweitens bekämpft es effektiv Speicherfragmentierung durch den "Free List Sharding"-Algorithmus – die Aufteilung der Freispeicherlisten nach Größe und Thread. Drittens bietet mimalloc integrierten Schutz vor bestimmten Schwachstellen (Double-Free, Use-After-Free) und unterstützt "Guarded Allocations" für das Debugging. Das macht es zur idealen Wahl für hochbelastete Server, Spiele-Engines, DBMS und jeden C++-Code, bei dem Speichergeschwindigkeit entscheidend ist.
In diesem Artikel gehen wir im Detail darauf ein, wie man mimalloc installiert, seine wichtigsten Funktionen nutzt und zeigen reale Beispiele für die Integration in C++-Projekte. Sie erfahren, wie Sie den Standard-malloc mit nur einer Zeile Code ersetzen und eine Leistungssteigerung von bis zu 30-50% erzielen, ohne die Geschäftslogik zu ändern.
Installation
mimalloc kann auf verschiedene Weise installiert werden. Die empfohlenen Methoden sind über die Paketmanager vcpkg oder Conan, oder der Build aus den Quellen.
Über vcpkg (empfohlen für Windows/Linux/macOS)
# Installieren Sie vcpkg, falls noch nicht geschehen
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh # oder .\bootstrap-vcpkg.bat unter Windows
./vcpkg integrate install
# Installation von mimalloc
./vcpkg install mimalloc
Über Conan
conan install mimalloc/2.1.6@
Build aus den Quellen (Linux/macOS)
git clone https://github.com/microsoft/mimalloc
cd mimalloc
mkdir -p build && cd build
cmake ..
make -j$(nproc)
sudo make install
Einbindung in ein CMake-Projekt
find_package(mimalloc REQUIRED)
target_link_libraries(my_target PRIVATE mimalloc::mimalloc)
Schnellstart: Minimales funktionsfähiges Beispiel
Der einfachste Weg, mimalloc zu nutzen, ist, den Standard-malloc/new durch seine Version zu ersetzen. Dazu genügt es, die globalen Operatoren new/delete zu überschreiben.
#include <iostream>
#include <mimalloc.h>
#include <mimalloc-new-delete.h> // überschreibt globale new/delete
int main() {
// Ab jetzt verwenden alle new/delete mimalloc
int* arr = new int[1000];
for (int i = 0; i < 1000; ++i) arr[i] = i;
std::cout << "Summe: " << arr[500] << std::endl;
delete[] arr;
// Man kann auch die C-Funktionen direkt nutzen
void* p = mi_malloc(64);
mi_free(p);
return 0;
}
Kompilieren Sie mit der Verlinkung zu mimalloc:
g++ -std=c++17 main.cpp -lmimalloc -o test
Wichtige Methoden und Funktionen
mimalloc bietet sowohl ein C-kompatibles API (Funktionen mit dem Präfix mi_) als auch C++-Wrapper. Im Folgenden werden 8 Schlüsselfunktionen vorgestellt.
1. mi_malloc – Speicher zuweisen
Signatur: void* mi_malloc(size_t size)
Funktion: Weist einen Speicherblock der Größe size Bytes zu. Analog zum Standard-malloc, aber für Multithreading optimiert.
# Auch in der Bibliothek
ring Rust: Kryptographie-Bibliothek mit Beispielen
Superstruct für TypeScript: Komplettguide mit Beispielen