堆栈的区别

堆栈

是应用程序在运行的时候让操作 系统给自己分配的内存,C/C++分别用malloc/New请求分配Heap,用free/delete销毁内存。由于从操作系统管理的内存分配所以在分配和销毁时都要占用时间,所以用堆的效率低的多!但是堆的好处是可以做的很大,C/C++对分配的Heap是不初始化的。

堆的相关特性:

1.堆是由操作系统管理的一片空间,事先是没有在进程空间里分配的(比如你在没有分配堆的时候就访问堆空间会报一个内存访问错误),一般是由程序动态的分配出来,一旦分配了以后,一般需要程序去释放自己的堆空间。

2.堆的空间较大,但访问速度没有栈

3.堆受垃圾处理器GC管理(GC会去找那些很久没有引用地址指向的内存块,把它们清理掉)。

:是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FILO的特性,在编译的时候可以指定需要的Stack的大小。

栈的相关特性:

1.栈上是向下填充的,数据只能从栈的顶端插入和删除(先进后出原则)。把数据放入栈顶称为入栈(push),从栈顶删除数据称为出栈(pop)。

2.栈的空间较小,但访问速度快。

3.栈的生长方向是有高地址向低地址生长的。

4.栈的清理是由系统自动完成的。

堆栈的区别:

系统会自动的在栈上为其开辟空间。而堆则是程序员根据需要自己申请的空间,例如malloc(10); 开辟十个字节的空间。由于栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦忘记释放会造成内存泄露。

堆不分先进后出还是先进先出,堆没有任何访问限制,它就像是你的书架,所有的书都排列在书架上,当你想看某一本书的时候,可以随时找到一本我们需要的书,从书架上把它拿下来。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值