mi-malloc 1.8/2.1
 
Lade...
Suche...
Keine Treffer
Erweiterte Funktionen

Erweiterte Funktionalität. Mehr...

Makros

#define MI_SMALL_SIZE_MAX
 Maximale Größe für kleine Allokationen in mi_malloc_small und mi_zalloc_small (normalerweise 128*sizeof(void*) (= 1 KB auf 64-Bit-Systemen))
 

Typedefs

typedef void mi_deferred_free_fun(bool force, unsigned long long heartbeat, void *arg)
 Typ von Deferred-Free-Funktionen.
 
typedef void mi_output_fun(const char *msg, void *arg)
 Typ von Ausgabefunktionen.
 
typedef void mi_error_fun(int err, void *arg)
 Typ von Fehler-Callback-Funktionen.
 
typedef int mi_arena_id_t
 Mimalloc verwendet große (virtuelle) Speicherbereiche, die vom Betriebssystem als „Arenen“ bezeichnet werden, zur Speicherverwaltung.
 
typedef void * mi_subproc_id_t
 Ein Prozess kann Threads mit Subprozessen verknüpfen.
 

Funktionen

void * mi_malloc_small (size_t size)
 Allokiert ein kleines Objekt.
 
void * mi_zalloc_small (size_t size)
 Allokiert ein mit Null initialisiertes kleines Objekt.
 
size_t mi_usable_size (void *p)
 Gibt die verfügbaren Bytes in einem Speicherblock zurück.
 
size_t mi_good_size (size_t size)
 Gibt die genutzte Allokationsgröße zurück.
 
void mi_collect (bool force)
 Gibt Speicher vorzeitig frei.
 
void mi_stats_print (void *out)
 Veraltet.
 
void mi_stats_print_out (mi_output_fun *out, void *arg)
 Gibt die Hauptstatistiken aus.
 
void mi_stats_reset (void)
 Setzt Statistiken zurück.
 
void mi_stats_merge (void)
 Führt Thread-lokale Statistiken mit den Hauptstatistiken zusammen und setzt sie zurück.
 
void mi_thread_init (void)
 Initialisiert mimalloc auf einem Thread.
 
void mi_thread_done (void)
 Deinitialisiert mimalloc auf einem Thread.
 
void mi_thread_stats_print_out (mi_output_fun *out, void *arg)
 Gibt Heap-Statistiken für diesen Thread aus.
 
void mi_register_deferred_free (mi_deferred_free_fun *deferred_free, void *arg)
 Registriert eine Deferred-Free-Funktion.
 
void mi_register_output (mi_output_fun *out, void *arg)
 Registriert eine Ausgabefunktion.
 
void mi_register_error (mi_error_fun *errfun, void *arg)
 Registriert eine Fehler-Callback-Funktion.
 
bool mi_is_in_heap_region (const void *p)
 Ist ein Zeiger Teil unseres Heaps?
 
int mi_reserve_os_memory (size_t size, bool commit, bool allow_large)
 Reserviert OS-Speicher zur Verwendung durch mimalloc.
 
bool mi_manage_os_memory (void *start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node)
 Verwaltet einen bestimmten Speicherbereich zur Verwendung durch mimalloc.
 
int mi_reserve_huge_os_pages_interleave (size_t pages, size_t numa_nodes, size_t timeout_msecs)
 Reserviert pages riesige OS-Seiten (1 GiB), gleichmäßig verteilt auf numa_nodes Knoten, stoppt aber nach maximal timeout_msecs Sekunden.
 
int mi_reserve_huge_os_pages_at (size_t pages, int numa_node, size_t timeout_msecs)
 Reserviert pages riesige OS-Seiten (1 GiB) an einem bestimmten numa_node, stoppt aber nach maximal timeout_msecs Sekunden.
 
bool mi_is_in_heap_region ()
 Ist die C-Laufzeit-malloc-API umgeleitet?
 
void mi_process_info (size_t *elapsed_msecs, size_t *user_msecs, size_t *system_msecs, size_t *current_rss, size_t *peak_rss, size_t *current_commit, size_t *peak_commit, size_t *page_faults)
 Gibt Prozessinformationen (Zeit- und Speichernutzung) zurück.
 
void mi_debug_show_arenas (bool show_inuse, bool show_abandoned, bool show_purge)
 Zeigt alle aktuellen Arenen an.
 
void * mi_arena_area (mi_arena_id_t arena_id, size_t *size)
 Gibt die Größe einer Arena zurück.
 
int mi_reserve_huge_os_pages_at_ex (size_t pages, int numa_node, size_t timeout_msecs, bool exclusive, mi_arena_id_t *arena_id)
 Reserviert riesige OS-Seiten (1 GiB) in einer einzelnen Arena.
 
int mi_reserve_os_memory_ex (size_t size, bool commit, bool allow_large, bool exclusive, mi_arena_id_t *arena_id)
 Reserviert OS-Speicher, der in einer Arena verwaltet werden soll.
 
bool mi_manage_os_memory_ex (void *start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node, bool exclusive, mi_arena_id_t *arena_id)
 Verwaltet extern allokierten Speicher als mimalloc-Arena.
 
mi_heap_tmi_heap_new_in_arena (mi_arena_id_t arena_id)
 Erstellt einen neuen Heap, der nur in der angegebenen Arena allokiert.
 
mi_heap_tmi_heap_new_ex (int heap_tag, bool allow_destroy, mi_arena_id_t arena_id)
 Erstellt einen neuen Heap.
 
mi_subproc_id_t mi_subproc_main (void)
 Gibt die Haupt-Subprozess-ID zurück.
 
mi_subproc_id_t mi_subproc_new (void)
 Erstellt einen neuen Subprozess (ohne zugehörige Threads).
 
void mi_subproc_delete (mi_subproc_id_t subproc)
 Löscht einen zuvor erstellten Subprozess.
 
void mi_subproc_add_current_thread (mi_subproc_id_t subproc)
 Fügt den aktuellen Thread zum angegebenen Subprozess hinzu.
 

Detaillierte Beschreibung

Erweiterte Funktionalität.

Dokumentation der Makrodefinition

◆ MI_SMALL_SIZE_MAX

#define MI_SMALL_SIZE_MAX

Maximale Größe für kleine Allokationen in mi_malloc_small und mi_zalloc_small (normalerweise 128*sizeof(void*) (= 1 KB auf 64-Bit-Systemen))

Typedef-Dokumentation

◆ mi_arena_id_t

typedef int mi_arena_id_t

Mimalloc verwendet große (virtuelle) Speicherbereiche, die vom Betriebssystem als „Arenen“ bezeichnet werden, zur Speicherverwaltung.

Jede Arena hat eine zugehörige Kennung.

◆ mi_deferred_free_fun

typedef void mi_deferred_free_fun(bool force, unsigned long long heartbeat, void *arg)

Typ von Deferred-Free-Funktionen.

Parameter
forceWenn true, sollten alle offenen Elemente freigegeben werden.
heartbeatEin monoton steigender Zähler.
argArgument, das bei der Registrierung übergeben wurde, um zusätzliche Zustandsinformationen zu speichern.
Siehe auch
mi_register_deferred_free

◆ mi_error_fun

typedef void mi_error_fun(int err, void *arg)

Typ von Fehler-Callback-Funktionen.

Parameter
errFehlercode (siehe mi_register_error() für eine vollständige Liste).
argArgument, das bei der Registrierung übergeben wurde, um zusätzliche Zustandsinformationen zu speichern.
Siehe auch
mi_register_error()

◆ mi_output_fun

typedef void mi_output_fun(const char *msg, void *arg)

Typ von Ausgabefunktionen.

Parameter
msgAuszugebende Nachricht.
argArgument, das bei der Registrierung übergeben wurde, um zusätzliche Zustandsinformationen zu speichern.
Siehe auch
mi_register_output()

◆ mi_subproc_id_t

typedef void* mi_subproc_id_t

Ein Prozess kann Threads mit Subprozessen verknüpfen.

Ein Subprozess wird keinen Speicher von (verwaisten Heaps/Threads) anderer Subprozesse zurückfordern.

Funktionsdokumentation

◆ mi_arena_area()

void * mi_arena_area ( mi_arena_id_t arena_id,
size_t * size )

Gibt die Größe einer Arena zurück.

Parameter
arena_idDie Arena-Kennung.
sizeZurückgegebene Größe in Bytes des (virtuellen) Arena-Bereichs.
Rückgabe
Basisadresse der Arena.

◆ mi_collect()

void mi_collect ( bool force)

Gibt Speicher vorzeitig frei.

Parameter
forceWenn true, wird Speicher aggressiv an das Betriebssystem zurückgegeben (kann teuer sein!).

Normaler Code sollte diese Funktion nicht aufrufen müssen. Sie kann in sehr engen Umständen nützlich sein; insbesondere, wenn ein lang laufender Thread viele Blöcke allokiert, die von anderen Threads freigegeben werden, kann sie die Ressourcennutzung verbessern, indem sie diese Funktion gelegentlich aufruft.

◆ mi_debug_show_arenas()

void mi_debug_show_arenas ( bool show_inuse,
bool show_abandoned,
bool show_purge )

Zeigt alle aktuellen Arenen an.

Parameter
show_inuseZeigt die in Benutzung befindlichen Arena-Blöcke an.
show_abandonedZeigt die verwaisten Arena-Blöcke an.
show_purgeZeigt Arena-Blöcke an, die zur Bereinigung vorgemerkt sind.

◆ mi_good_size()

size_t mi_good_size ( size_t size)

Gibt die genutzte Allokationsgröße zurück.

Parameter
sizeDie minimal erforderliche Größe in Bytes.
Rückgabe
die Größe n, die allokiert wird, wobei n >= size.

Im Allgemeinen gilt: mi_usable_size(mi_malloc(size)) == mi_good_size(size). Dies kann verwendet werden, um interne Speicherverschwendung zu reduzieren, z. B. beim Allokieren von Puffern.

Siehe auch
mi_usable_size()

◆ mi_heap_new_ex()

mi_heap_t * mi_heap_new_ex ( int heap_tag,
bool allow_destroy,
mi_arena_id_t arena_id )

Erstellt einen neuen Heap.

Parameter
heap_tagDer Heap-Tag, der diesem Heap zugeordnet ist; Heaps geben nur Speicher zwischen Heaps mit demselben Tag zurück.
allow_destroyIst mi_heap_destroy erlaubt? Wenn dies nicht erlaubt ist, kann der Heap Speicher von beendeten Threads zurückgewinnen.
arena_idWenn nicht 0, allokiert der Heap nur aus der angegebenen Arena.
Rückgabe
Ein neuer Heap oder NULL im Fehlerfall.

Die arena_id kann von Laufzeitsystemen verwendet werden, um nur in einer bestimmten, vorab reservierten Arena zu allokieren. Dies wird z. B. für einen Heap mit komprimierten Zeigern in Koka verwendet. Der heap_tag ermöglicht es Heaps, Objekte eines bestimmten Typs von Heaps mit diesem Tag zu isolieren. Dies wird z. B. in der CPython-Integration verwendet.

◆ mi_heap_new_in_arena()

mi_heap_t * mi_heap_new_in_arena ( mi_arena_id_t arena_id)

Erstellt einen neuen Heap, der nur in der angegebenen Arena allokiert.

Parameter
arena_idDie Arena-Kennung.
Rückgabe
Der neue Heap oder NULL.

◆ mi_is_in_heap_region()

bool mi_is_in_heap_region ( const void * p)

Ist ein Zeiger Teil unseres Heaps?

Parameter
pDer zu prüfende Zeiger.
Rückgabe
true, wenn dies ein Zeiger in unseren Heap ist. Diese Funktion ist relativ schnell.

◆ mi_is_redirected()

bool mi_is_redirected ( )

Ist die C-Laufzeit-malloc-API umgeleitet?

Rückgabe
true, wenn alle malloc-API-Aufrufe an mimalloc umgeleitet werden.

Derzeit nur unter Windows verwendet.

◆ mi_malloc_small()

void * mi_malloc_small ( size_t size)

Allokiert ein kleines Objekt.

Parameter
sizeDie Größe in Bytes, kann höchstens MI_SMALL_SIZE_MAX betragen.
Rückgabe
ein Zeiger auf neu allokierten Speicher von mindestens size Bytes oder NULL bei Speichermangel. Diese Funktion ist für die Verwendung in Laufzeitsystemen zur besten Leistung gedacht und prüft nicht, ob size tatsächlich klein war – mit Vorsicht verwenden!

◆ mi_manage_os_memory()

bool mi_manage_os_memory ( void * start,
size_t size,
bool is_committed,
bool is_large,
bool is_zero,
int numa_node )

Verwaltet einen bestimmten Speicherbereich zur Verwendung durch mimalloc.

Dies ist wie mi_reserve_os_memory, außer dass der Bereich bereits auf irgendeine Weise allokiert und für mimalloc verfügbar sein sollte.

Parameter
startStart des Speicherbereichs
sizeDie Größe des Speicherbereichs.
is_committedIst der Bereich bereits committed?
is_largeBesteht er aus großen OS-Seiten? Setzen Sie dies ebenfalls auf true für Speicher, der nicht decommittet oder geschützt werden soll (wie RDMA usw.).
is_zeroBesteht der Bereich aus Nullen?
numa_nodeMöglicher zugeordneter NUMA-Knoten oder -1.
Rückgabe
true bei Erfolg und false bei einem Fehler.

◆ mi_manage_os_memory_ex()

bool mi_manage_os_memory_ex ( void * start,
size_t size,
bool is_committed,
bool is_large,
bool is_zero,
int numa_node,
bool exclusive,
mi_arena_id_t * arena_id )

Verwaltet extern allokierten Speicher als mimalloc-Arena.

Dieser Speicher wird nicht von mimalloc freigegeben.

Parameter
startStartadresse des Bereichs.
sizeGröße des Bereichs in Bytes.
is_committedIst der Speicher bereits committed?
is_largeBesteht er aus (festen) großen OS-Seiten?
is_zeroIst der Speicher mit Null initialisiert?
numa_nodeZugehöriger NUMA-Knoten oder -1 für keine NUMA-Präferenz.
exclusiveIst die Arena exklusiv (d. h. nur Heaps, die mit der Arena verbunden sind, können darin allokieren)?
arena_idDie neue Arena-Kennung.
Rückgabe
true bei Erfolg.

◆ mi_process_info()

void mi_process_info ( size_t * elapsed_msecs,
size_t * user_msecs,
size_t * system_msecs,
size_t * current_rss,
size_t * peak_rss,
size_t * current_commit,
size_t * peak_commit,
size_t * page_faults )

Gibt Prozessinformationen (Zeit- und Speichernutzung) zurück.

Parameter
elapsed_msecsOptional. Abgelaufene Wanduhrzeit des Prozesses in Millisekunden.
user_msecsOptional. Benutzerzeit in Millisekunden (als Summe aller Threads).
system_msecsOptional. Systemzeit in Millisekunden.
current_rssOptional. Aktuelle Größe des physischen Speichers (belegte Seiten).
peak_rssOptional. Maximale Größe des physischen Speichers (belegte Seiten).
current_commitOptional. Aktuell committede Speicher (vom Seitendatei unterstützt).
peak_commitOptional. Maximale committede Speicher (vom Seitendatei unterstützt).
page_faultsOptional. Anzahl der harten Seitenfehler.

Der current_rss ist unter Windows und MacOSX präzise; andere Systeme schätzen dies mit current_commit. Das commit ist unter Windows präzise, wird aber unter anderen Systemen als die von mimalloc reservierte, für Lese-/Schreibzugriff verfügbare Speichermenge geschätzt.

◆ mi_register_deferred_free()

void mi_register_deferred_free ( mi_deferred_free_fun * deferred_free,
void * arg )

Registriert eine Deferred-Free-Funktion.

Parameter
deferred_freeAdresse einer Funktion zur verzögerten Freigabe oder NULL zum Abmelden.
argArgument, das an die Deferred-Free-Funktion übergeben wird.

Einige Laufzeitsysteme verwenden verzögerte Freigabe, z. B. bei der Verwendung von Referenzzählung zur Begrenzung der Worst-Case-Freigabezeit. Solche Systeme können (wiederaufrufbare) Deferred-Free-Funktionen registrieren, um bei Bedarf mehr Speicher freizugeben. Wenn der Parameter force true ist, sollte aller mögliche Speicher freigegeben werden. Der pro Thread heartbeat-Parameter ist monoton steigend und garantiert deterministisch, wenn das Programm deterministisch allokiert. Die deferred_free-Funktion wird garantiert nach einer bestimmten Anzahl von Allokationen (unabhängig von der Freigabe oder dem verfügbaren freien Speicher) deterministisch aufgerufen. Höchstens eine deferred_free-Funktion kann aktiv sein.

◆ mi_register_error()

void mi_register_error ( mi_error_fun * errfun,
void * arg )

Registriert eine Fehler-Callback-Funktion.

Parameter
errfunDie Fehlerfunktion, die bei einem Fehler aufgerufen wird (verwenden Sie NULL für die Standardeinstellung).
argZusätzliches Argument, das an die Fehlerfunktion übergeben wird.

Die Funktion errfun wird bei einem Fehler in mimalloc aufgerufen, nachdem eine Fehlermeldung ausgegeben wurde (über die Ausgabefunktion). Es ist immer zulässig, einfach aus der Funktion errfun zurückzukehren, in diesem Fall geben Allokationsfunktionen im Allgemeinen NULL zurück oder ignorieren die Bedingung. Die Standardfunktion ruft nur abort() auf, wenn sie im sicheren Modus mit einem EFAULT-Fehler kompiliert wurde. Die möglichen Fehlercodes sind:

  • EAGAIN: Doppelte Freigabe erkannt (nur im Debug- und sicheren Modus).
  • EFAULT: Beschädigte Freigabeliste oder Metadaten erkannt (nur im Debug- und sicheren Modus).
  • ENOMEM: Nicht genügend Speicher verfügbar, um die Anforderung zu erfüllen.
  • EOVERFLOW: Zu große Anforderung, z. B. in mi_calloc(), die Parameter count und size sind zu groß.
  • EINVAL: Versuch, einen ungültigen Zeiger freizugeben oder neu zu allokieren.

◆ mi_register_output()

void mi_register_output ( mi_output_fun * out,
void * arg )

Registriert eine Ausgabefunktion.

Parameter
outDie Ausgabefunktion, verwenden Sie NULL für die Ausgabe nach stderr.
argArgument, das an die Ausgabefunktion übergeben wird.

Die Funktion out wird aufgerufen, um alle Informationen von mimalloc auszugeben, wie z. B. detaillierte oder Warnmeldungen.

◆ mi_reserve_huge_os_pages_at()

int mi_reserve_huge_os_pages_at ( size_t pages,
int numa_node,
size_t timeout_msecs )

Reserviert pages riesige OS-Seiten (1 GiB) an einem bestimmten numa_node, stoppt aber nach maximal timeout_msecs Sekunden.

Parameter
pagesDie Anzahl der zu reservierenden 1-GiB-Seiten.
numa_nodeDer NUMA-Knoten, an dem der Speicher reserviert wird (beginnt bei 0). Verwenden Sie -1 für keine Affinität.
timeout_msecsMaximale Anzahl von Millisekunden für den Reservierungsversuch, oder 0 für kein Timeout.
Rückgabe
0 bei Erfolg, ENOMEM bei Speichermangel oder ETIMEDOUT bei Timeout.

Der reservierte Speicher wird von mimalloc zur Erfüllung von Allokationen verwendet. Kann vor Ablauf von timeout_msecs beendet werden, wenn geschätzt wird, dass es mehr als das 1,5-fache von timeout_msecs dauert. Das Zeitlimit ist erforderlich, da es auf einigen Betriebssystemen lange dauern kann, zusammenhängenden Speicher zu reservieren, wenn der physische Speicher fragmentiert ist.

◆ mi_reserve_huge_os_pages_at_ex()

int mi_reserve_huge_os_pages_at_ex ( size_t pages,
int numa_node,
size_t timeout_msecs,
bool exclusive,
mi_arena_id_t * arena_id )

Reserviert riesige OS-Seiten (1 GiB) in einer einzelnen Arena.

Parameter
pagesAnzahl der zu reservierenden 1-GiB-Seiten.
numa_nodeDer zugehörige NUMA-Knoten oder -1 für keine NUMA-Präferenz.
timeout_msecsMaximale Millisekunden, die diese Operation dauern darf. (0 ist unendlich)
exclusiveWenn exklusiv, kann nur ein mit dieser Arena verbundener Heap darin allokieren.
arena_idDie Arena-Kennung.
Rückgabe
0 bei Erfolg, ENOMEM bei Speichermangel oder ETIMEDOUT bei Timeout.

◆ mi_reserve_huge_os_pages_interleave()

int mi_reserve_huge_os_pages_interleave ( size_t pages,
size_t numa_nodes,
size_t timeout_msecs )

Reserviert pages riesige OS-Seiten (1 GiB), gleichmäßig verteilt auf numa_nodes Knoten, stoppt aber nach maximal timeout_msecs Sekunden.

Parameter
pagesDie Anzahl der zu reservierenden 1-GiB-Seiten.
numa_nodesDie Anzahl der Knoten, auf die die Seiten gleichmäßig verteilt werden sollen, oder 0 für die tatsächliche Anzahl von NUMA-Knoten.
timeout_msecsMaximale Anzahl von Millisekunden für den Reservierungsversuch, oder 0 für kein Timeout.
Rückgabe
0 bei Erfolg, ENOMEM bei Speichermangel oder ETIMEDOUT bei Timeout.

Der reservierte Speicher wird von mimalloc zur Erfüllung von Allokationen verwendet. Kann vor Ablauf von timeout_msecs beendet werden, wenn geschätzt wird, dass es mehr als das 1,5-fache von timeout_msecs dauert. Das Zeitlimit ist erforderlich, da es auf einigen Betriebssystemen lange dauern kann, zusammenhängenden Speicher zu reservieren, wenn der physische Speicher fragmentiert ist.

◆ mi_reserve_os_memory()

int mi_reserve_os_memory ( size_t size,
bool commit,
bool allow_large )

Reserviert OS-Speicher zur Verwendung durch mimalloc.

Reservierte Bereiche werden vor der erneuten Allokation vom Betriebssystem verwendet. Durch die Vorabreservierung eines großen Bereichs kann die Allokation effizienter sein und auf Systemen ohne mmap/VirtualAlloc (wie WASM) besser verwaltet werden.

Parameter
sizeDie zu reservierende Größe.
commitSpeicher sofort committen.
allow_largeGroße OS-Seiten (2 MiB) verwenden?
Rückgabe
0 bei Erfolg und einen Fehlercode sonst (z. B. ENOMEM).

◆ mi_reserve_os_memory_ex()

int mi_reserve_os_memory_ex ( size_t size,
bool commit,
bool allow_large,
bool exclusive,
mi_arena_id_t * arena_id )

Reserviert OS-Speicher, der in einer Arena verwaltet werden soll.

Parameter
sizeGröße der Reservierung.
commitSoll der Speicher initial committet werden?
allow_largeVerwendung von großen OS-Seiten erlauben?
exclusiveIst die zurückgegebene Arena exklusiv?
arena_idDie neue Arena-Kennung.
Rückgabe
Null bei Erfolg, sonst ein Fehlercode.

◆ mi_stats_merge()

void mi_stats_merge ( void )

Führt Thread-lokale Statistiken mit den Hauptstatistiken zusammen und setzt sie zurück.

◆ mi_stats_print()

void mi_stats_print ( void * out)

Veraltet.

Parameter
outIgnoriert, gibt standardmäßig an die registrierte Ausgabefunktion oder stderr aus.

Am detailliertesten bei Verwendung eines Debug-Builds.

◆ mi_stats_print_out()

void mi_stats_print_out ( mi_output_fun * out,
void * arg )

Gibt die Hauptstatistiken aus.

Parameter
outEine Ausgabefunktion oder NULL für die Standardeinstellung.
argOptionales Argument, das an out übergeben wird (wenn nicht NULL).

Am detailliertesten bei Verwendung eines Debug-Builds.

◆ mi_stats_reset()

void mi_stats_reset ( void )

Setzt Statistiken zurück.

◆ mi_subproc_add_current_thread()

void mi_subproc_add_current_thread ( mi_subproc_id_t subproc)

Fügt den aktuellen Thread zum angegebenen Subprozess hinzu.

Dies sollte direkt nach der Erstellung eines Threads aufgerufen werden (und bevor eine Allokation stattgefunden hat).

◆ mi_subproc_delete()

void mi_subproc_delete ( mi_subproc_id_t subproc)

Löscht einen zuvor erstellten Subprozess.

Parameter
subprocDie Subprozess-Kennung. Löschen Sie nur Subprozesse, wenn alle zugehörigen Threads beendet wurden.

◆ mi_subproc_main()

mi_subproc_id_t mi_subproc_main ( void )

Gibt die Haupt-Subprozess-ID zurück.

◆ mi_subproc_new()

mi_subproc_id_t mi_subproc_new ( void )

Erstellt einen neuen Subprozess (ohne zugehörige Threads).

Rückgabe
Die neue Subprozess-Kennung.

◆ mi_thread_done()

void mi_thread_done ( void )

Deinitialisiert mimalloc auf einem Thread.

Sollte nicht verwendet werden, da dies auf den meisten Systemen (pthreads, Windows) automatisch geschieht. Stellt sicher, dass Speicher, der noch nicht freigegeben wurde (aber von anderen Threads in Zukunft freigegeben wird), ordnungsgemäß behandelt wird.

◆ mi_thread_init()

void mi_thread_init ( void )

Initialisiert mimalloc auf einem Thread.

Sollte nicht verwendet werden, da dies auf den meisten Systemen (pthreads, Windows) automatisch geschieht.

◆ mi_thread_stats_print_out()

void mi_thread_stats_print_out ( mi_output_fun * out,
void * arg )

Gibt Heap-Statistiken für diesen Thread aus.

Parameter
outEine Ausgabefunktion oder NULL für die Standardeinstellung.
argOptionales Argument, das an out übergeben wird (wenn nicht NULL).

Am detailliertesten bei Verwendung eines Debug-Builds.

◆ mi_usable_size()

size_t mi_usable_size ( void * p)

Gibt die verfügbaren Bytes in einem Speicherblock zurück.

Parameter
pZeiger auf zuvor allokierten Speicher (oder NULL).
Rückgabe
Gibt die verfügbaren Bytes im Speicherblock zurück, oder 0, wenn p NULL war.

Die zurückgegebene Größe kann verwendet werden, um mi_expand erfolgreich aufzurufen. Die zurückgegebene Größe ist immer mindestens gleich der allokierten Größe von p.

Siehe auch
_msize (Windows)
malloc_usable_size (Linux)
mi_good_size()

◆ mi_zalloc_small()

void * mi_zalloc_small ( size_t size)

Allokiert ein mit Null initialisiertes kleines Objekt.

Parameter
sizeDie Größe in Bytes, kann höchstens MI_SMALL_SIZE_MAX betragen.
Rückgabe
ein Zeiger auf neu allokierten, mit Null initialisierten Speicher von mindestens size Bytes oder NULL bei Speichermangel. Diese Funktion ist für die Verwendung in Laufzeitsystemen zur besten Leistung gedacht und prüft nicht, ob size tatsächlich klein war – mit Vorsicht verwenden!