C / C++系列 (3):heap vs. stack & new vs. malloc

文章参考:细说new和malloc区别
Linux虚拟地址空间布局以及进程栈和线程栈总结

在内存分配中会涉及到栈和堆(和数据结构中的堆栈不同),所以先介绍以下在内存中栈和堆的区别

heap vs. stack

key points:

  • 堆(heap):持久化、顺序随意、全局
  • 栈(stack):临时、 后进先出、局部

1、申请方式

  • 堆:由程序员自己申请并指明大小的,当进程调用malloc / new等函数分配内存时,新分配的内存动态添加到堆上(扩张);当调用free / delete等函数释放内存时,被释放的内存从堆中剔除(缩减) 。
  • 栈:系统自动分配的,如声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间,有以下三个方面的用途:
  1. 为函数内部声明的非静态局部变量(C语言中称“自动变量”)提供存储空间。
  2. 记录函数调用过程相关的维护性信息,称为栈帧(Stack Frame)或过程活动记录(Procedure Activation Record)。它包括函数返回地址,不适合装入寄存器的函数参数及一些寄存器值的保存。除递归调用外,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值