mimalloc für C++: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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.

#                    

Empfehlungen