_freea

Hebt die Zuweisung eines Speicherblocks auf oder gibt diesen frei.

Syntax

void _freea(
   void *memblock
);

Parameter

memblock
Zuvor zugewiesener Speicherblock, der freigegeben werden soll.

Rückgabewert

Keine.

Hinweise

Die _freea Funktion verteilt einen Speicherblock (memblock), der zuvor von einem Aufruf _mallocazugeordnet wurde. _freea überprüft, ob der Speicher auf dem Heap oder Stapel belegt wurde. Wenn Speicher auf dem Stapel belegt wurde, führt _freea keine Aktion aus. Wenn Speicher auf dem Heap belegt wurde, entspricht die Anzahl der freigegebenen Bytes der Anzahl der Bytes, die angefordert wurden, als der Block belegt wurde. Ist memblock dies NULLder Wert, wird der Zeiger ignoriert und _freea wird sofort zurückgegeben. Der Versuch, einen ungültigen Zeiger freizugeben (ein Zeiger auf einen Speicherblock, der _mallocanicht zugewiesen wurde), kann sich auf nachfolgende Zuordnungsanforderungen auswirken und Fehler verursachen.

_freea ruft intern auf free , wenn festgestellt wird, dass der Speicher für den Heap zugewiesen wird. Ein Marker bestimmt im Speicher an der Adresse, die dem zugewiesenen Speicher unmittelbar vorausgeht, ob der Speicher auf dem Heap oder dem Stapel belegt wird.

Wenn bei der Freigabe des Speichers ein Fehler auftritt, wird errno mit Informationen des Betriebssystems über die Art des Fehlers angegeben. Weitere Informationen finden Sie untererrno, _doserrno, _sys_errlistund _sys_nerr.

Nachdem ein Speicherblock freigegeben wurde, wird die Menge an freiem Speicher auf dem Heap minimiert, _heapmin indem die nicht verwendeten Regionen zusammengefasst und wieder an das Betriebssystem freigegeben werden. Freigegebener Arbeitsspeicher, der nicht für das Betriebssystem freigegeben ist, wird im kostenlosen Pool wiederhergestellt und steht erneut für die Zuweisung zur Verfügung.

Alle Aufrufe von _malloca müssen von einem Aufruf von _freea begleitet werden. Es ist auch ein Fehler, zweimal im gleichen Speicher aufzurufen _freea . Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, insbesondere mit _malloc_dbg Features, die durch Definieren _CRTDBG_MAP_ALLOCaktiviert sind, ist es einfacher, fehlende oder duplizierte Aufrufe zu _freeafinden. Weitere Informationen dazu, wie der Heap während des Debuggingvorgangs verwaltet wird, finden Sie im CRT-Debug-Heap.

_freea ist als __declspec(noalias) gekennzeichnet, d.h., die Funktion ändert keine globalen Variablen. Weitere Informationen finden Sie unter noalias.

Anforderungen

Funktion Erforderlicher Header
_freea <stdlib.h> und <malloc.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

Ein Beispiel hierfür finden Sie unter _malloca.

Siehe auch

Speicherzuweisung
_malloca
calloc
malloc
_malloc_dbg
realloc
_free_dbg
_heapmin