A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔克 黑马帝   /  2011-11-29 21:43  /  2916 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内存的堆 和栈是什么概念啊?

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

5 个回复

倒序浏览
这是我查的资料:希望对你有用
堆:
在程序中,堆用于动态分配和释放程序所使用的对象。在以下情况中调用堆操作:
1.事先不知道程序所需对象的数量和大小。
2.对象太大,不适合使用堆栈分配器。
栈:
栈,是硬件。主要作用表现为一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
棧  
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 就释放了


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

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

例如,你吧你家钥匙给我告诉我地址,那么我就能把你家的贵重物品搬走,你回家看到的就是空房子

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
在数据结构中,栈(stack)是限定仅在表尾进行插入或删除操作的线性表。对栈来说表尾端有其特殊的含义称为栈顶(top),表头端称为栈底。不含元素的空表称为空栈,栈的修改是按后进先出的原则。假设s=(a,b,····,c)则称为a为栈底元素,c为栈顶元素。栈中的元素按a,b,···,c的次序进栈,退栈的第一个元素应为栈顶的元素。栈的修改是按后进先出的原则。
队(queue)是一种先进后出的线性表。它允许在表的一端进行插入,而在另一端删除元素,在队列中,允许插入的一端叫做队尾,允许删除的一端称为对头。假设队列为Q=(a,b,·······,c),那么,a就是对头元素,c则是队尾元素。队列中的元素是按照a,b,····,c的顺序进入的,退出队列也只能按照这个次序依次推出的。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
这是计算机内存分配策略,.NET在此方面也做了很大工作,大家都知道C#中的数据类型简单分类,可以分为两类,值类型和引用类型,值类型在定义时是定义在栈上,原因是它占用的内存空间比较小,而引用类型则比较复杂,声明是声明在栈上,但是初始化时,就再堆上了,可以理解为,栈是小内存块,用来存引用名,而堆是大内存块,用来存放实例对象。使用对象时是通过引用对象的那个栈变量来访问堆变量。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马