heapwalk

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Alloc.h - Index


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;
}