栈和堆的区别
一、栈和堆的区别
栈:由操作系统自动分配释放,存放函数的参数和局部变量的值等。其操作方式类似于数据结构中的栈。简单的理解就是当定义一个变量的值,这块空间就叫做栈,然而栈中一般存放的是基本类型数据,栈的特点是后进先出。
堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。其实在堆中一般存放变量是一些对象类型。
1.储存大小
栈内存的储存大小是固定的,申请时由系统自动分配内存空间,运行的效率比较快,但是因为存储的大小固定,所以容易存储的大小超过存储的大小,导致益栈。
堆内存的存储的值的大小不定,是由程序员自己申请并指明大小。因为堆内存的new分配的内存,所以运行效率较低。
2.存储对象
栈内存存储的基础数据类型,并且是按值访问,因为栈是一块连续的内存区域,以后进先出的原则存储调用的,所以是连续存储的。
堆内存是向高地址扩展的数据结构,是不连续的内存区域,系统也是用链表来存储空闲的内存地址,所以是不连续的。因为是记录的内存地址,所以获取的通过引用,存储的是对象居多。
3.回收
栈的回收是系统控制实现的。
栈内存的回收是人为控制的,当程序结束后,系统会自动回收。
一、栈和堆的区别
栈:由操作系统自动分配释放,存放函数的参数和局部变量的值等。其操作方式类似于数据结构中的栈。简单的理解就是当定义一个变量的值,这块空间就叫做栈,然而栈中一般存放的是基本类型数据,栈的特点是后进先出。
堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。其实在堆中一般存放变量是一些对象类型。
1.储存大小
栈内存的储存大小是固定的,申请时由系统自动分配内存空间,运行的效率比较快,但是因为存储的大小固定,所以容易存储的大小超过存储的大小,导致益栈。
堆内存的存储的值的大小不定,是由程序员自己申请并指明大小。因为堆内存的new分配的内存,所以运行效率较低。
2.存储对象
栈内存存储的基础数据类型,并且是按值访问,因为栈是一块连续的内存区域,以后进先出的原则存储调用的,所以是连续存储的。
堆内存是向高地址扩展的数据结构,是不连续的内存区域,系统也是用链表来存储空闲的内存地址,所以是不连续的。因为是记录的内存地址,所以获取的通过引用,存储的是对象居多。
3.回收
栈的回收是系统控制实现的。
栈内存的回收是人为控制的,当程序结束后,系统会自动回收。
- 点赞
- 收藏
- 关注作者
评论(0)