C/C++中的堆与栈

在一个函数内部定义了一个变量,或者向某个函数传递参数时,这些变量或参数存储在栈中。当退出变量作用域时,栈上的存储单元会被自动释放。一个程序使用的栈大小一般是固定的,由编译器决定。Visual Studio 2003默认的栈大小是1MB。由于栈是由系统自动分配的,压栈和出栈都是有相应的指令操作,因此栈的效率较高,分配的内存空间也是连续的。

当使用malloc或者new创建一个对象时,申请的内存是在堆上分配,堆上的内存通过free或delete手动释放,在实际使用的中容易忘记释放堆内存造成内存泄露。堆的大小只受限于系统有效的虚拟内存的大小,堆可以动态地管理数据,用来分配创建一些占用内存较大的对象或数据。堆在分配内存空间时按照一定的算法寻找适合大小的空闲堆,并修改相应的维护空闲空间的链表,然后返回地址给程序,因此堆的效率较低,容易产生内存碎片。

转载于:https://www.cnblogs.com/lc7cl/archive/2011/01/21/1941026.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值