堆栈和堆

 栈(stack)可以看成是一种“特殊的”线性表,这种线性表上的插入和删除运算限定在表的某一端进行。允许进行插入和删除的这一端称为栈顶,另一端称为栈底。处于栈顶位置的数据元素称为栈顶元素。

   堆 (heap)
内存的组成部分,保留给程序用于临时存储数据结构,这些数据结构的存在或大小在程序运行之前都无法确定。

 

值类型的变量就保存在堆栈上,而引用类型的就保存在堆上这句话如何理解?

1       每一个应用程序都有其自己的内存地址。一部分内存空间用于存放程序代码,一部分内存空间用于存放程序执行期间 。理解堆的最好的方法是将它看成一个程序随时可以使用的内存块。(相当于全局变量)为了创建堆变量,程序要使用“new”(在C++里)操作符或者 “malloc”(在C中)例程,它们返回指向变量的指针(堆变量总是通过指针来处理和操作)。最后程序用“delete”(在C++里)操作符 或者“free”(在C中)例程来删除或者释放内存空间。  分配在堆里面的,则不会释放,需要垃圾回收器发现无用,然后释放
         而堆栈则不同,C#中分配在堆栈里面的,在函数退出的时候就释放了。它是某个函数被调用后随时可以创建的一小块内存,被用于在函数范围内保存变量(也称为自动变量)。在函数中,任何 包含在{}内的代码都有其自己的堆栈。当这个函数或者{}退出时,堆栈以及它包含的所有内容都被摧毁。

2   堆和堆栈是两块不同的空间,堆栈是为函数及其参数、内部变量等开辟的空间,结构为数据结构中的栈结构,一般来说栈空间比较小(在C++中是这样的,C++的栈空间总计为2MB,C#还不是特别清楚)。堆空间是程序可以使用的附加空间,空间比较大(一般不超过4GB)。总体来说值类型存在堆栈中,引用类型存在堆中,堆栈的速度比较快

 总的来说就是堆栈用来存放临时变量,空间比较小的内存空间,在函数结束的时候就内存里的 变量就被摧毁了。而堆是用来存放全局变量的,空间比较大 (好象是4GB的)的内存空间,它不会自动释放,必须需要垃圾回收器器来清理。堆栈存放值变量,而堆存放引用变量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值