堆 、?栈 、?堆栈 推就是你的无息贷款银行, 你说: 我要点钱使使然后你用new/malloc/virtualalloc....来向银行贷款用完了, 你得还给银行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 堆栈都是数据段的内容。当我们调用一个子程序时。这是进入栈(因为还要返回)。所以在子程序定义的局部变量在这时分配地址。所以是在栈中。返回时就没有了堆是另外一块区域。我们用NEW出来的就在这里面动态的分配。我的理解应该那些全局的还有STATIC的都放在这。不会释放掉。 堆heap 栈stack栈是进程启动时系统分配给进程的地址空间,栈结构即FILO,进程终止时栈自动释放由系统回收,因此没有泄露的隐患。栈的数据是易失的,超出了作用域数据就会丢失。堆我理解是全局内存,进程需要申请才会分配,没有作用范围因此存在堆上的数据不是易失的new和delete操作符申请到的内存是HEAP上的,所以进程终止前必须释放否则会造成内存泄露(leap)。推荐看一些WINDOWS核心书,E文的讲的很清楚。 myclass MyObject; //这样定义,对象存放在栈中,当退出对象作用域时,由编译器负责释放。myclass MyObeject = new myclass; //向系统申请一块内存,在堆中,使用完毕,由程序员负责释放 你能够控制的内存空间叫堆,可以用new delete malloc free等函数来进行分配等工作。而栈是由系统负责的,你没有权利操作栈——虽然你的程序中的大部份数据都是存在栈中,但具体放在哪儿、怎么放,与你无关。之所以要这么严格,是因为栈的FIFO的机制要求看起来简单,但真正用起来很烦人,稍有不慎,比如说用了两个push,而只用了一个pop,则以后所有对栈的操作都错了,后果不堪设想。而相比之下,管理堆就没有那有费心了,就算new 过以后没有delete,也只是一个内存漏洞而已,浪费了一点空间,没有什么严重后果。正因为这样,系统才会把管理堆的权利下放(当然了,还没有完全下放)。 sjn(sjn)老兄应该说的差不多。堆对每一个进程地址空间应该是全局的。所以我估计全局变量和STATIC就放在这里面。 反了吧heap-栈stack-堆去MSDN上查一查Heap: Pleasures and Pains谈的较清晰,虽然有些观点不能认同 前段时间看《深入浅出MFC》时也遇到这样的问题,我比较喜欢happylaodu的说法,简单明了,谢谢!哦,对了,“开发文档”中有一篇《"堆"和"栈"的基本概念(C/C++初学者必读)》,虽然说的有点抽象,但还时值得看看的。 补充:heap必须是一个完全二分树,所有父节点大于子节点或所有父节点小于子节点 有什么函数可以获得到QQ用户名和密码的句柄? 去掉对话框标题栏图标 想使用CDC::GetPixel获取一个资源位图的像素,总是失败。 [大家探讨一下]如何实现读取物理地址内容?(一直在线) 图片问题,现在有很多种图片格式, 请教如何测试连接数 小弟对于元文件(MetaFile)的一点理解,不知对不对,请高手指正。 new到底能分配多大内存? activex打包成cab嵌入网页发布后,客户端ie每次都提示安装,高手请进!!! vc 操作 pdf 用哪个开发库好(安全,功能完善) 虚函数的问题 关于CreateRemoteThread函数?
这是进入栈(因为还要返回)。所以在子程序定义的局部变量
在这时分配地址。所以是在栈中。返回时就没有了
堆是另外一块区域。我们用NEW出来的就在这里面动态的分配。
我的理解应该那些全局的还有STATIC的都放在这。不会释放掉。
栈stack栈是进程启动时系统分配给进程的地址空间,栈结构即FILO,进程终止时栈自动释放由系统回收,因此没有泄露的隐患。栈的数据是易失的,超出了作用域数据就会丢失。
堆我理解是全局内存,进程需要申请才会分配,没有作用范围因此存在堆上的数据不是易失的
new和delete操作符申请到的内存是HEAP上的,所以进程终止前必须释放否则会造成内存泄露(leap)。推荐看一些WINDOWS核心书,E文的讲的很清楚。
而栈是由系统负责的,你没有权利操作栈——虽然你的程序中的大部份数据都是存在栈中,但具体放在哪儿、怎么放,与你无关。之所以要这么严格,是因为栈的FIFO的机制要求看起来简单,但真正用起来很烦人,稍有不慎,比如说用了两个push,而只用了一个pop,则以后所有对栈的操作都错了,后果不堪设想。
而相比之下,管理堆就没有那有费心了,就算new 过以后没有delete,也只是一个内存漏洞而已,浪费了一点空间,没有什么严重后果。正因为这样,系统才会把管理堆的权利下放(当然了,还没有完全下放)。
堆对每一个进程地址空间应该是全局的。
所以我估计全局变量和STATIC就放在这里面。
heap-栈
stack-堆
去MSDN上查一查Heap: Pleasures and Pains谈的较清晰,虽然有些观点不能认同
我比较喜欢happylaodu的说法,简单明了,谢谢!
哦,对了,“开发文档”中有一篇《"堆"和"栈"的基本概念(C/C++初学者必读)》,虽然说的有点抽象,但还时值得看看的。