_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
兩次也是錯誤。 當應用程式與 C 執行時間連結庫的偵錯版本連結時,特別是 _malloc_dbg
透過定義 _CRTDBG_MAP_ALLOC
啟用的功能時,更容易找到遺漏或重複的 _freea
呼叫。 如需如何在偵錯程式期間管理堆積的詳細資訊,請參閱 CRT偵錯堆積。
_freea
標記為 __declspec(noalias)
,表示保證函式不會修改全域變數。 如需詳細資訊,請參閱noalias
。
函式 | 必要的標頭 |
---|---|
_freea |
<stdlib.h> 和 <malloc.h> |
如需相容性詳細資訊,請參閱相容性。
請參閱 _malloca
的範例。
記憶體配置
_malloca
calloc
malloc
_malloc_dbg
realloc
_free_dbg
_heapmin