请教:关于堆和栈的理解的问题

newkaka1981 2002-10-08 01:30:44
看Win32编程的书时经常看到“应用程序堆栈”这个词,请问“应用程序堆栈”和数据结构中的“堆栈”的概念有什么区别?应用程序在内存管理时用到的“堆”和“栈”这两个概念又有什么区别?
...全文
32 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
haifenghe 2002-10-08
  • 打赏
  • 举报
回复
堆(Heap)是动态分配到的memory空间。而栈(stack)是用来放程序中的局部变量等的静态空间。Heap一般由链表来加以维护.而Stack由栈指针XSP来维护.
rivershan 2002-10-08
  • 打赏
  • 举报
回复
在C和C++中,有三种使用存储区的基本方式:
1)静态存储区(Static Memory)
在静态存储区中,连接器(linker)根据程序的需求为对象分配空间。全局变量、静态类成员以及函数中的静态变量都被分配在该区域中。一个在该区域中分配的对象只被构造一次,其生存期一直维持到程序结束。在程序运行的时候其中的地址是固定不变的。在使用线程(thread,共享地址空间的并发物)的程序里,静态对象可能会引起一些问题,因为这时的静态对象是被共享的,要对其正常访问就需要进行锁定操作。

2)自动存储区(Automatic Memory)
函数的参数和局部变量被分配在此。对同一个函数或区块的每一处调用,其在该区域内都有自己单独的位置。这种存储被自动创建和销毁;因而才叫做“自动存储区”。自动存储区也被称为是“在栈上的(be on the stack)”。

3)自由存储区(Free Store)
在该区域中,程序必须明确的为对象申请空间,并可以在使用完毕之后释放申请到的空间(使用new和delete运算符)。当程序需要其中更多的空间时,就使用new向操作系统提出申请。通常情况下,自由存储区(也被称作动态存储区或者堆(heap))在一个程序的生存期内是不断增大的,因为其间被其它程序占用的空间从来都不被归还给操作系统。
newkaka1981 2002-10-08
  • 打赏
  • 举报
回复
也就是说堆和栈的区别在于处理方式的不同?堆要自己分配自己回收,栈则是系统自动处理的?
NOldkiller 2002-10-08
  • 打赏
  • 举报
回复
堆中一般可通过malloc/free .new /delete,在堆中对象内存的申请和清除都要通过自己来处理。也就是说他的生命期的长短是由自己来控制的。
而堆栈一般用于局部变量的分配。内存的申请和清除由域的范围来控制。
kwiner 2002-10-08
  • 打赏
  • 举报
回复
up

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧