C++ 内存管理

内存区域

  1. 栈内存(Stack Memory):栈内存是由编译器自动管理的内存区域,用于存储函数的局部变量、函数参数和返回值。栈内存的大小是固定的,且由编译器决定。当函数调用时,栈内存会自动分配,当函数返回时,栈内存会自动释放。

  2. 堆内存(Heap Memory):堆内存是由程序员手动管理的内存区域,用于存储动态分配的内存的区域。堆内存的大小可以在运行时动态调整。程序可以使用 new 运算符在堆内存中分配内存,使用 delete 运算符释放内存。

  3. 全局变量内存(Global Variable Memory):全局变量内存是用于存储全局变量的内存区域。全局变量在程序启动时分配内存,在程序结束时释放内存。

  4. 静态变量内存(Static Variable Memory):静态变量内存是用于存储静态变量的内存区域。静态变量在程序启动时分配内存,在程序结束时释放内存。

  5. 常量内存(Constant Variable Memory):常量内存是用于存储常量的内存区域。常量在程序编译时分配内存,在程序结束时释放内存。

// 栈内存
void foo() {
    int x = 10;
}

// 堆内存
int* p = new int(10);

// 全局变量内存
int globalVar = 10;

// 静态变量内存
static int staticVar = 10;

// 常量内存
const int constVar = 10;
区域定义分配方式释放方式访问范围大小
栈(Stack)函数参数、局部变量和函数返回值的内存区域自动分配自动释放函数内固定
堆(Heap)动态分配的内存区域手动分配(new)手动释放(delete)全局动态扩展
全局变量区(Global Variable Area)全局变量的内存区域编译时分配程序结束时释放全局固定
静态变量区(Static Variable Area)静态变量的内存区域编译时分配程序结束时释放文件内固定
常量区(Constant Area)常量的内存区域编译时分配程序结束时释放全局固定

内存管理

手动内存管理

  1. new 运算符用于在堆或自由存储区中分配内存。它可以为一个对象或一个数组分配内存。

  2. delete 运算符用于释放堆或自由存储区中的内存,释放由 new 分配的内存。它可以释放一个对象或一个数组的内存。

  3. malloc 函数用于在堆中分配内存。

  4. free 函数用于释放堆中的内存,释放由 malloc 分配的内存。

  5. calloc 函数用于在堆中分配内存并初始化为0。

  6. realloc 函数用于调整堆中的内存大小。

int* p = new int;   // 分配一个int大小的内存
delete p;           // 释放一个int大小的内存

int* arr = new int[10];     // 分配一个int数组的内存
delete[] arr;               // 释放一个int数组的内存

void* p = malloc(sizeof(int));  // 分配一个int大小的内存
free(p);                        // 释放一个int大小的内存

void* p = calloc(1, sizeof(int));   // 分配一个int大小的内存并初始化为0

void* p = realloc(p, 2 * sizeof(int));  // 重新分配内存大小
函数名描述参数返回值
new动态分配内存类型和大小指向分配内存的指针
delete释放动态分配的内存指向内存的指针
malloc动态分配内存大小指向分配内存的指针
free释放动态分配的内存指向内存的指针
calloc动态分配内存并初始化为0数量和大小指向分配内存的指针
realloc重新分配内存大小指向内存的指针和新大小指向重新分配内存的指针
  • newdelete 是 C++ 中的运算符,而 mallocfreecallocrealloc 是 C语言中的函数。
  • newdelete 可以用于对象和数组的内存分配和释放,而 mallocfree 只能用于内存块的分配和释放。
  • new 在分配内存时会调用对象的构造函数,而 delete 在释放内存时会调用对象的析构函数。
  • mallocfree 不会调用对象的构造函数和析构函数。
  • 在 C++ 中,建议使用 newdelete 进行内存管理,而不是 mallocfree

智能指针

智能指针是 C++11 引入的一种内存管理方式,用于自动管理内存,避免内存泄漏和野指针。

详细可参考:C++ 指针、智能指针、引用

容器

容器是 C++ 标准库提供的一种内存管理方式,用于自动管理内存,避免内存泄漏和野指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值