C++ 有些只需要积累


c++中 new 一个对象的时候 底层调用的是heapfree


栈是存放函数返回地址、参数、局部变量的。  
  堆是程序可以自由操作的内存,使用时先申请,用完之后释放,如何使用完全由程序代码 控制 。

 

栈在汇编代码中表示成PUSH   POP,用的是ESS段,SP寄存器  
  而堆不是,是在 内存 中读写,EDS段,

 

C++包括两种被应用程序 管理 的内存区域:一种称为栈(stack), 另一种称为堆(heap)。  
  stack是函数被调用时自动 分配 的一块内存区域,它主要用于保留函数内使用的变量及函数调用位置处下一条代码的地址。  
  stack是后进先出,一个可变的指针指向stack的顶部。  
  本质上,当一个函数被 程序 调用时,当前的执行地址被放入stack,如果有参数传递到函数内,这些参数也被压入stack,如果函数内有变量,它们也被压入stack,如果函数执行时调用另一个函数,重复上面的过程。  
  当从函数返回时,stack指针指向存放先前执行地址的位置,也就是说,stack空间内分配的元素已被删除。这就是为什么函数内的变量此时无效,因为它们已经被推出了stack,另外要注意的是,声明一个静态变量,它没有进入stack中。  
  另一种由应用程序管理的内存区域是堆(heap),heap是储存应用程序的内存分配需求,并且分离于程序代码和stack,heap中分配的对象的总的空间受限于计算机 系统 中有效的虚拟内存。  
  C程序通常使用malloc和free分配和回收heap内存,在C++中,使用new和delete.

 

函数里的变量一般是stack,用new和malloc分配的是heap  
  stack是有大小限制的,heap的大小与系统虚拟内存差不多  
  stack运算比heap快  
  stack由编译器来管理,heap由程序员new,   malloc,   delete,   free
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值