C/C++内存管理——内存泄漏/内存碎片
一、什么是内存泄漏
内存泄漏指的是在程序运行过程中,已经分配给程序使用的内存没有得到及时和正确的释放,导致这部分内存无法被程序再次使用或者被操作系统回收。内存泄漏通常发生在动态分配的内存上,如果这部分内存没有被正确释放,随着时间的推移,越来越多的内存将被占用,最终可能导致程序运行缓慢或者崩溃。
二、C++中手动管理内存以避免内存泄漏的方法
1. 使用 new 和 delete 正确管理内存:
使用 new 分配的内存必须使用 delete 释放。
使用 new[] 分配的数组必须使用 delete[] 释放。
确保每一块分配的内存都有对应的释放操作。
代码示例:
int* p = new int(10);
delete p; // 释放内存
int* arr = new int[5];
delete[] arr; // 释放数组内存
2. 使用智能指针(Smart Pointers)
C++11 引入了智能指针,如 std::unique_ptr 和 std::shared_ptr,它们可以在对象不再使用时自动释放内存,从而避免内存泄漏。
std::unique_ptr 独占所有权,不可复制,但在转移时会自动释放旧的内存。