heapwalk
Nach oben zu Alloc.h - Index
Inhaltsverzeichnis
Header-Datei
alloc.h
Prototyp
int heapwalk(struct heapinfo *hi);
Beschreibung
heapwalk wird verwendet, um den Heap-Speicher Knoten für Knoten zu durchlaufen.
heapwalk setzt voraus, dass der Heap korrekt ist. Überprüfen Sie mit heapcheck den Heap, bevor Sie heapwalk einsetzen. _HEAPOK wird zusammen mit dem letzten Block des Heap-Speichers zurückgegeben. Beim nächsten Aufruf von heapwalk wird _HEAPEND zurückgegeben.
heapwalk wird ein Zeiger auf eine Struktur vom Typ heapinfo (der in alloc.h definiert ist) übergeben. Setzen Sie das Feld hi.ptr im ersten Aufruf von heapwalk auf Null. heapwalk gibt dann für hi.ptr die Adresse des ersten Blocks zurück. hi.size enthält die Größe des Blocks in Bytes. hi.in_use ist ein Flag, das gesetzt ist, wenn der Block gegenwärtig belegt ist.
Rückgabewert
Einer der folgenden Werte:
_HEAPEMPTY | Es ist kein Heap-Speicher vorhanden. |
_HEAPEND | Es wurde das Ende des Heap erreicht. |
_HEAPOK | Der heapinfo-Block enthält gültige Informationen über den nächsten Heap-Block. |
Portabilität
POSIX | ANSI C | ANSI C++ | Win32 | Win64 | macOS | |
---|---|---|---|---|---|---|
heapwalk | + |
Beispiel
#include <stdio.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(void) {
struct heapinfo hi;
char *array[NUM_PTRS];
int i;
for (i = 0; i < NUM_PTRS; i++)
array[i] = (char *) malloc(NUM_BYTES);
for (i = 0; i < NUM_PTRS; i += 2)
free(array[i]);
hi.ptr = NULL;
printf(" Size Status\n");
printf(" ---- ------\n");
while (heapwalk(&hi) == _HEAPOK)
printf("%7u %s\n", hi.size, hi.in_use ? "used" : "free");
return 0;
}