C++ 内存分配基础

C++ 提供了多种内存分配方式,包括静态分配、栈分配和堆分配。

静态分配:全局变量和静态变量在程序启动时分配,生命周期贯穿整个程序运行期。
栈分配:局部变量和函数参数在栈上分配,函数结束时自动释放。
堆分配:通过 newdelete 动态管理内存,需手动释放以避免泄漏。

动态内存管理

堆内存通过 newdelete 运算符管理:

int* ptr = new int;    // 分配单个整型  
*ptr = 10;  
delete ptr;            // 释放内存  

int* arr = new int[5]; // 分配数组  
delete[] arr;          // 释放数组需用 delete[]  

常见问题与解决方案

内存泄漏:未释放动态分配的内存。解决方法是确保 newdelete 成对使用,或采用智能指针。

野指针:访问已释放的内存。释放后应将指针置为 nullptr

智能指针:C++11 引入的 std::unique_ptrstd::shared_ptr 可自动管理内存:

#include <memory>  
std::unique_ptr<int> uptr(new int(10)); // 自动释放  
std::shared_ptr<int> sptr = std::make_shared<int>(20);  

内存对齐与优化

alignas 关键字和 alignof 运算符用于控制内存对齐,提升访问效率:

alignas(16) struct Data {  
    int a;  
    double b;  
};  

自定义内存分配器

通过重载 newdelete 运算符实现自定义分配策略,适用于特定性能场景:

void* operator new(size_t size) {  
    void* p = customAlloc(size);  
    if (!p) throw std::bad_alloc();  
    return p;  
}  

现代C++推荐实践

优先使用 STL 容器(如 std::vector)和智能指针,减少手动内存管理。RAII(资源获取即初始化)是核心设计模式。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐