黑马程序员技术交流社区

标题: 内存的堆 和栈是什么概念啊? [打印本页]

作者: 乔克    时间: 2011-11-29 21:43
标题: 内存的堆 和栈是什么概念啊?
内存的堆 和栈是什么概念啊?
作者: 何建华    时间: 2011-11-29 22:08
这是我查的资料:希望对你有用
堆:
在程序中,堆用于动态分配和释放程序所使用的对象。在以下情况中调用堆操作:
1.事先不知道程序所需对象的数量和大小。
2.对象太大,不适合使用堆栈分配器。
栈:
栈,是硬件。主要作用表现为一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
作者: 杨本国    时间: 2011-11-29 22:17
、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
作者: 李海龙    时间: 2011-11-30 14:59
棧  
int a = 7;
在棧中开辟空间存入a和7,把7指向a 如果从新赋值 a = 8; 在棧中存入8 并且把8 指向a ,7在编译时 自动被释放不在占用空间;
例如
咱俩都有100块钱,100块钱指向你,也指向我, 你发财了有101,那么101指向你,100还是指向我
int a = 100;
int b =100;
a = 101;
我还是没变 你变了  在棧中 你的 100 就释放了


堆分为值调用 和引用调用;

值调用 不改变堆中的值 操作的紧紧是地址的一个副本 地址中的属性方法不发生变化;
引用调用 是把地址指向另外一个变量,操作的的是地址,地址中的属性和方法发生变化 在调用地址就是改变后;

例如,你吧你家钥匙给我告诉我地址,那么我就能把你家的贵重物品搬走,你回家看到的就是空房子
作者: 张彪    时间: 2011-12-1 21:39
在数据结构中,栈(stack)是限定仅在表尾进行插入或删除操作的线性表。对栈来说表尾端有其特殊的含义称为栈顶(top),表头端称为栈底。不含元素的空表称为空栈,栈的修改是按后进先出的原则。假设s=(a,b,····,c)则称为a为栈底元素,c为栈顶元素。栈中的元素按a,b,···,c的次序进栈,退栈的第一个元素应为栈顶的元素。栈的修改是按后进先出的原则。
队(queue)是一种先进后出的线性表。它允许在表的一端进行插入,而在另一端删除元素,在队列中,允许插入的一端叫做队尾,允许删除的一端称为对头。假设队列为Q=(a,b,·······,c),那么,a就是对头元素,c则是队尾元素。队列中的元素是按照a,b,····,c的顺序进入的,退出队列也只能按照这个次序依次推出的。
作者: 董志    时间: 2011-12-2 12:47
这是计算机内存分配策略,.NET在此方面也做了很大工作,大家都知道C#中的数据类型简单分类,可以分为两类,值类型和引用类型,值类型在定义时是定义在栈上,原因是它占用的内存空间比较小,而引用类型则比较复杂,声明是声明在栈上,但是初始化时,就再堆上了,可以理解为,栈是小内存块,用来存引用名,而堆是大内存块,用来存放实例对象。使用对象时是通过引用对象的那个栈变量来访问堆变量。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2