_freea
メモリ ブロックを割り当て解除または解放します。
構文
void _freea(
void *memblock
);
パラメーター
memblock
以前割り当てられ、解放されるメモリ ブロック。
戻り値
ありません。
解説
この関数は _freea
、以前に呼び出しによって割り当てられたメモリ ブロック (memblock
) の割り当てを解除します _malloca
。 _freea
は、ヒープまたはスタック上でメモリが割り当てられているかどうかを確認します。 スタック上で割り当てられている場合、_freea
は何も行いません。 ヒープ上で割り当てられている場合、解放されるバイト数は、ブロックが割り当てられたときに要求されたバイト数と同じです。 if memblock
is NULL
, the pointer is ignored, and _freea
immediately returns. 無効なポインター (割り当てられなかったメモリ ブロックへのポインター) を解放しようとすると、後続の割り当て _malloca
要求に影響し、エラーが発生する可能性があります。
_freea
は、メモリがヒープに割り当てられていることが判明した場合に内部的に呼び出 free
されます。 メモリが、ヒープまたはスタックのどちらにあるかは、割り当てられたメモリの直前のアドレスにメモリ内で配置されたマーカーによって決まります。
メモリの解放でエラーが発生すると、エラーの性質に関するオペレーティング システムからの情報が errno
に設定されます。 詳細については、「errno
」、「_doserrno
」、「_sys_errlist
」、および「_sys_nerr
」を参照してください。
メモリ ブロックが解放されたら、 _heapmin
未使用の領域を結合してオペレーティング システムに解放することで、ヒープ上の空きメモリの量を最小限に抑えます。 オペレーティング システムにリリースされない解放されたメモリは、空きプールに復元され、再度割り当てに使用できます。
_freea
に対する呼び出しは、_malloca
に対するすべての呼び出しを伴う必要があります。 また、同じメモリで 2 回呼び出 _freea
すとエラーになります。 アプリケーションが 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
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示