在 Linux 下使用 C++ 进行内存管理,通常涉及语言层面的内存分配机制、操作系统提供的能力以及常见的最佳实践。下面从几个层次系统地讲一下。
void foo() {
int a = 10; // 栈上分配
}
通过 new / delete 或 malloc / free 管理
int* p = new int(10);
delete p;
int* arr = new int[100];
delete[] arr;
⚠️ 注意:
new ↔ deletenew[] ↔ delete[]用对象生命周期管理资源,避免手动 delete
std::unique_ptrstd::unique_ptr<int> p = std::make_unique<int>(10);
std::shared_ptrstd::shared_ptr<int> p = std::make_shared<int>(10);
std::weak_ptrshared_ptr 循环引用std::weak_ptr<int> wp = p;
✅ 现代 C++ 建议:尽量不用裸 new
查看进程内存:
cat /proc/<pid>/maps
cat /proc/<pid>/status
new/malloc 底层调用:
brkmmapvalgrind --leak-check=full ./a.out
g++ -fsanitize=address -g main.cpp
./a.out
查看内存使用趋势
new/deletestd::vector::reserve❌ 错误:
int* p = new int(10);
// 忘记 delete
✅ 正确:
auto p = std::make_unique<int>(10);
如果你有具体场景(比如:
我可以给你更有针对性的建议。