在Linux下,C++的内存管理主要涉及以下几个方面:
栈内存管理:
ulimit -s命令查看和修改栈的大小。堆内存管理:
new、malloc等函数进行分配。delete、free等函数进行释放。智能指针:
std::unique_ptr、std::shared_ptr、std::weak_ptr),它们可以自动管理内存,避免内存泄漏。std::unique_ptr独占资源所有权,不能被复制,只能移动。std::shared_ptr允许多个指针共享资源所有权,通过引用计数来管理资源的生命周期。std::weak_ptr用于解决std::shared_ptr的循环引用问题。内存对齐:
posix_memalign函数来分配对齐的内存。内存映射文件:
mmap系统调用可以将文件映射到内存中,从而可以直接通过内存操作来读写文件。内存保护:
mprotect系统调用来修改内存页的保护属性。内存调试工具:
以下是一个简单的示例,展示了如何在C++中使用智能指针来管理内存:
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() { std::cout << "MyClass constructed\n"; }
~MyClass() { std::cout << "MyClass destructed\n"; }
};
int main() {
// 使用std::unique_ptr管理内存
std::unique_ptr<MyClass> ptr(new MyClass());
// 使用std::shared_ptr管理内存
std::shared_ptr<MyClass> sharedPtr = std::make_shared<MyClass>();
// 不需要手动释放内存,智能指针会自动管理
return 0;
}
在这个示例中,std::unique_ptr和std::shared_ptr分别用于管理MyClass对象的生命周期,确保在不再需要时自动释放内存。