heapwalk

提供: RAD Studio
移動先: 案内検索

alloc.h:インデックス への移動


ヘッダーファイル

alloc.h

プロトタイプ

int heapwalk(struct heapinfo *hi);

説明

heapwalk を使用して,ヒープ上を 1 ノードずつ移動します。

heapwalk は,ヒープに問題がないと仮定します。heapwalk を使用する前に,heapcheck を使ってヒープを検証してください。ヒープ上の最後のブロックでは,_HEAPOK が返されます。heapwalk の次の呼び出しでは,_HEAPEND が返されます。

heapwalk は,heapinfo 型(alloc.h で宣言)の構造体へのポインタを受け取ります。heapwalk の最初の呼び出しでは,hi.ptr フィールドを null に設定します。heapwalk は,hi.ptr に最初のブロックのアドレスを格納して戻ります。hi.size は,ブロックのサイズ(バイト単位)を保持します。hi.in_use は,ブロックが現在使用中の場合に設定されるフラグです。

戻り値

次のいずれかの値です。

_HEAPEMPTY

ヒープが存在しません。

_HEAPEND

ヒープの終わりに到達しました。

_HEAPOK

heapinfo ブロックに,次のヒープブロックに関する有効な情報が含まれています。

移植性

POSIX ANSI C ANSI C++ Win32 Win64 OS X
heapwalk +

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