釋放記憶體(free/delete)不會將記憶體內容歸零,核心動作是向記憶體管理器(分配器/作業系統)宣告:「這塊區塊不再使用,可供後續分配請求複用」。
逐位元寫入 0 需耗費 CPU 週期與記憶體頻寬。對於大型區塊或高頻分配/釋放場景,清零開銷不可忽視。現代分配器(如 glibc malloc、Windows Heap、Jemalloc)皆採用「標記空閒」策略:
記憶體釋放類似「快速刪除/快速格式化」,為了速度犧牲即時清零。
首次釋放後,區塊已被標記「空閒」並從「已配置」記錄移除。第二次釋放時,分配器發現該區塊不在「已配置」清單中(或 Header 魔數已損壞),判定為 Double Free,觸發 SIGABRT/HEAP CORRUPTION 終止程式,避免後續未定義行為(如惡意利用)。
free(ptr); ptr = nullptr; 防止誤用懸空指標。std::unique_ptr/shared_ptr,RAII 自動管理生命週期,根除手動釋放錯誤。memset_s/SecureZeroMemory 等安全清零函式,防止殘留被讀取。記憶體釋放 = 更新管理元資料,歸還所有權,而非清零資料。理解此機制,有助於避免 Double Free、Use-After-Free 等經典錯誤,也能在安全敏感場景做正確處理。