_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 _malloca
zugeordnet 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 NULL
der Wert, wird der Zeiger ignoriert und _freea
wird sofort zurückgegeben. Der Versuch, einen ungültigen Zeiger freizugeben (ein Zeiger auf einen Speicherblock, der _malloca
nicht 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_errlist
und _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_ALLOC
aktiviert sind, ist es einfacher, fehlende oder duplizierte Aufrufe zu _freea
finden. 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