闭坑指南 · C#内存
内存泄漏与 double free
忘记 free 或重复 free,都会导致严重问题。
内存泄漏与 double free
内存泄漏
分配后丢失唯一指针,永远无法 free。长期运行的服务、循环里 malloc 不释放,会导致 RSS 持续增长 直至 OOM。
工具:valgrind --leak-check=full、ASan。
double free
同一块堆内存 free 两次,堆元数据损坏,可能立刻崩溃或留下安全隐患。
规则
- 每个
malloc/calloc/realloc对应最多一次free - 复杂所有权用「谁创建谁释放」文档化
- C++ 用 RAII;C 可用简单 arena 分配器减少碎片 free