C++程序对内存分配
·
C++ 内存分配基础
C++ 提供了多种内存分配方式,包括静态分配、栈分配和堆分配。
静态分配:全局变量和静态变量在程序启动时分配,生命周期贯穿整个程序运行期。
栈分配:局部变量和函数参数在栈上分配,函数结束时自动释放。
堆分配:通过 new 和 delete 动态管理内存,需手动释放以避免泄漏。
动态内存管理
堆内存通过 new 和 delete 运算符管理:
int* ptr = new int; // 分配单个整型
*ptr = 10;
delete ptr; // 释放内存
int* arr = new int[5]; // 分配数组
delete[] arr; // 释放数组需用 delete[]
常见问题与解决方案
内存泄漏:未释放动态分配的内存。解决方法是确保 new 和 delete 成对使用,或采用智能指针。
野指针:访问已释放的内存。释放后应将指针置为 nullptr。
智能指针:C++11 引入的 std::unique_ptr 和 std::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;
};
自定义内存分配器
通过重载 new 和 delete 运算符实现自定义分配策略,适用于特定性能场景:
void* operator new(size_t size) {
void* p = customAlloc(size);
if (!p) throw std::bad_alloc();
return p;
}
现代C++推荐实践
优先使用 STL 容器(如 std::vector)和智能指针,减少手动内存管理。RAII(资源获取即初始化)是核心设计模式。
更多推荐


所有评论(0)