C++内存管理

内存分配方式

在C++中,内存有5种方式:

栈:执行函数时,函数内部局部变量的存储单元在栈中创建,函数结束时,销毁。先进后出的存储方式。

堆:动态分布的区域,由new分配内存块。记得一个new一定对应一个delete。否则会造成内存泄漏。

自由存储区:是由malloc分配的内存块。一个malloc要对应一个free。

全局/静态存储区:全局变量和静态变量的居住点。

常量存储区:存储不允许修改的常量。

堆和栈的区别

  • 管理方式不一样:栈由编译器自动管理,堆由我们控制。
  • 空间大小不一样:栈内存没啥限制,堆内存有大小。
  • 能否产生碎片:栈不会产生碎片,堆频繁new/delete会产生碎片。
  • 生长方式不同:栈生长方向是内存地址减小的方向,堆是内存地址增加的方向。
  • 分配方式不同:栈分配方式方式有动态和静态分配。堆只能动态分配。
  • 分配效率不同:栈的效率高。

打个比喻:

栈:这里就像公司宿舍一样,由公司统一安排,在公司合同(函数)期间,可以居住,一旦到期,就得搬走。

堆:这里就像酒店一样,啥时候走由我们自己决定,只要交钱就行。

举个栗子:

void f() { int* p=new int[6]; }

这里面包含了栈和堆。

让我们来分析一下,首先看到new,那就是分配了堆空间,大小为6个int大小。有指针,由编译器分配栈空间。在栈空间中存放着一个指针p,指针p指向一块堆空间。


参考

C/C++内存管理详解







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值