栈和堆的区别

举报
dfsafdfas 发表于 2021/02/08 13:24:48 2021/02/08
【摘要】 一、栈和堆的区别  栈:由操作系统自动分配释放,存放函数的参数和局部变量的值等。其操作方式类似于数据结构中的栈。简单的理解就是当定义一个变量的值,这块空间就叫做栈,然而栈中一般存放的是基本类型数据,栈的特点是后进先出。  堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。其实在堆中一般存放变量是一些对象类型。  1.储存大小  栈内存的储存大小是固定的,...

一、栈和堆的区别

  栈:由操作系统自动分配释放,存放函数的参数和局部变量的值等。其操作方式类似于数据结构中的栈。简单的理解就是当定义一个变量的值,这块空间就叫做栈,然而栈中一般存放的是基本类型数据,栈的特点是后进先出。

  堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。其实在堆中一般存放变量是一些对象类型。

  1.储存大小

  栈内存的储存大小是固定的,申请时由系统自动分配内存空间,运行的效率比较快,但是因为存储的大小固定,所以容易存储的大小超过存储的大小,导致益栈。

  堆内存的存储的值的大小不定,是由程序员自己申请并指明大小。因为堆内存的new分配的内存,所以运行效率较低。

  2.存储对象

  栈内存存储的基础数据类型,并且是按值访问,因为栈是一块连续的内存区域,以后进先出的原则存储调用的,所以是连续存储的。

  堆内存是向高地址扩展的数据结构,是不连续的内存区域,系统也是用链表来存储空闲的内存地址,所以是不连续的。因为是记录的内存地址,所以获取的通过引用,存储的是对象居多。

  3.回收

  栈的回收是系统控制实现的。

  栈内存的回收是人为控制的,当程序结束后,系统会自动回收。

一、栈和堆的区别

  栈:由操作系统自动分配释放,存放函数的参数和局部变量的值等。其操作方式类似于数据结构中的栈。简单的理解就是当定义一个变量的值,这块空间就叫做栈,然而栈中一般存放的是基本类型数据,栈的特点是后进先出。

  堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。其实在堆中一般存放变量是一些对象类型。

  1.储存大小

  栈内存的储存大小是固定的,申请时由系统自动分配内存空间,运行的效率比较快,但是因为存储的大小固定,所以容易存储的大小超过存储的大小,导致益栈。

  堆内存的存储的值的大小不定,是由程序员自己申请并指明大小。因为堆内存的new分配的内存,所以运行效率较低。

  2.存储对象

  栈内存存储的基础数据类型,并且是按值访问,因为栈是一块连续的内存区域,以后进先出的原则存储调用的,所以是连续存储的。

  堆内存是向高地址扩展的数据结构,是不连续的内存区域,系统也是用链表来存储空闲的内存地址,所以是不连续的。因为是记录的内存地址,所以获取的通过引用,存储的是对象居多。

  3.回收

  栈的回收是系统控制实现的。

  栈内存的回收是人为控制的,当程序结束后,系统会自动回收。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。