_freea
メモリ ブロックを割り当て解除または解放します。
構文
void _freea(
void *memblock
);
パラメーター
memblock
以前割り当てられ、解放されるメモリ ブロック。
戻り値
ありません。
解説
_freea
関数は、_malloca
の呼び出しによって以前に割り当てられたメモリ ブロック (memblock
) の割り当てを解除します。 _freea
は、ヒープまたはスタック上でメモリが割り当てられているかどうかを確認します。 スタック上で割り当てられている場合、_freea
は何も行いません。 ヒープ上で割り当てられている場合、解放されるバイト数は、ブロックが割り当てられたときに要求されたバイト数と同じです。 memblock
がNULL
されている場合、ポインターは無視され、_freea
はすぐに返されます。 無効なポインター ( _malloca
によって割り当てられなかったメモリ ブロックへのポインター) を解放しようとすると、後続の割り当て要求に影響し、エラーが発生する可能性があります。
_freea
は、メモリがヒープに割り当てられていることが判明した場合に内部的に free
します。 メモリが、ヒープまたはスタックのどちらにあるかは、割り当てられたメモリの直前のアドレスにメモリ内で配置されたマーカーによって決まります。
メモリの解放でエラーが発生すると、エラーの性質に関するオペレーティング システムからの情報が errno
に設定されます。 詳細については、「errno
」、「_doserrno
」、「_sys_errlist
」、および「_sys_nerr
」を参照してください。
メモリ ブロックが解放された後、 _heapmin
は、未使用の領域を結合してオペレーティング システムに解放することで、ヒープ上の空きメモリの量を最小限に抑えます。 オペレーティング システムにリリースされない解放されたメモリは、空きプールに復元され、再度割り当てに使用できます。
_freea
に対する呼び出しは、_malloca
に対するすべての呼び出しを伴う必要があります。 また、同じメモリ上で _freea
を 2 回呼び出すとエラーになります。 アプリケーションが C ランタイム ライブラリのデバッグ バージョンにリンクされている場合 (特に、_CRTDBG_MAP_ALLOC
を定義して_malloc_dbg
機能が有効になっている場合)、_freea
の呼び出しが見つからないか重複しているのを簡単に見つけることができます。 デバッグ プロセス中にヒープを管理する方法の詳細については、「 CRT デバッグ ヒープを参照してください。
_freea
は __declspec(noalias)
としてマークされます。これは、関数がグローバル変数を変更しないことを保証します。 詳細については、noalias
を参照してください。
要件
機能 | 必須ヘッダー |
---|---|
_freea |
<stdlib.h> および <malloc.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
_malloca
の例を参照してください。
関連項目
メモリ割り当て
_malloca
calloc
malloc
_malloc_dbg
realloc
_free_dbg
_heapmin