关于C#堆栈的几点说明

  纠结了几天,幸遇贵人解惑,思路整理如下:

首先,关于堆栈这个东西,先要搞明白的是有2个:

1.数据结构的堆栈,链接:http://www.cnblogs.com/JeffChen/archive/2006/12/28/605689.html

2.C#的堆栈,就是本文的理解了。

栈上的是值类型、引用类型、指针类型的变量和值,在栈上面进行操作(引用,赋值等等),还有变量都在栈中
堆上的是对象
对象都是new出来的,new出来之后放了堆中。

有一个图书馆的例子很经典:堆就是图书馆中的书,而索引和标记就是栈。操作,查询这些都是栈的事情,

堆只是用来放书这些对象的。(对象是实体的书,指针和引用都是 计算机查找书时的索引和标记。在查找书的时候的相互赋值都是引用之间的操作,

也就是索引值一个数值,在第几行第几列的那种的。但是 入库和借出 这种操作是针对书的所以你得搞清楚,类型、变量、变量的值、操作符是针对什么的 这几个问题。

再如:大神教导用例:

string a = "aaaaa";
class objA = new class();

string 和 class是类型,
a和objA 是变量,
“aaaaa”和new出来的是值//当你说objA怎么怎么样的时候,你得先搞清楚,你说的是这个变量,还是这边变量所指向的值。

像“aaaaa”这种值,是在静态存储区的。
像 new class这种值,是在堆栈的

又如:

Class a = new Class();
Class b = a;

首先,new是一个函数,用来创造对象,返回引用。
所以Class a = new Class();中的Operator的=是针对Class的引用类型。

Class b = a; a和b都是Class的引用类型,所有还是引用的赋值
就跟int一样

但是b.xxx();这种就是调用函数,就是对对象的操作了。//就是说只有a是创建了一个对象,b是引用a但是没有创建对象.

如果说a放到了栈中,那a创建的对象就放在堆中,因为b只是引用的a,没有新创建,所以b和a的赋值操作都是在栈中进行的。

posted on 2013-08-21 17:34  鸣动我心  阅读(517)  评论(0编辑  收藏  举报