C#堆栈原理(我有三个例子测试你到底会不会)

2008年05月13日 发布于Qzone

 

 1.一位在荒漠里快要饿死了,那时他捡到了神灯。    
  神灯:” 笔者只好够兑现您1个意思,快说吗,作者赶时间。”    
  人: “笔者要老婆 ……”    
  神灯即刻变出二个美丽的女子,然后不屑的说:” 都快饿死了还贪图美色!可悲!
“说完就没有了。    
  人:”……饼。 ”    
    
2.蚯蚓一家这天相当的低级庸俗,小蚯蚓就把团结切成两段打羽球去了,    
  蚯蚓老母认为这措施不错,就把本人切成四段打麻将去了,    
  蚯蚓父亲想了想,就把温馨切成了肉末。    
  蚯蚓阿娘哭着说:” 你怎么如此傻?切这么碎会死的!”    
  蚯蚓阿爸弱弱地说: “……突然想踢足球。 ”    
    
3.白熊男要强X竹熊女,猛豹女奋力抵抗、誓死不从。    
 银狗男失利后愤怒地说:” 大家都快灭绝了耶! ”    
    
4.有一天动物们在关公庙前边闻到很臭的寓意。    
  蛇说:「作者这么小不会放这么臭的屁,一定是牛。」    
  牛说:「笔者是吃草的不会放这么臭的屁。」    
  猪说:「放屁的人一定会脸红。」    
  忽然美髯公冲了出来,把猪打飞说:「说了有些次了,小编脸红是纯天然的。」    
    
5.有私人住房一天碰着上帝..    
  上帝突然大发善心打算给那人二个愿望….    
  上帝问 …    
  你有哪些愿望吗…    
  那个家伙想了想…    
  听大人说猫都有 9条命…    
  那请你赐给小编 9条命吧 ..    
  上帝说..    
  你的希望完毕咯….    
  一天,那家伙闲来无聊 …    
  想说去死一死算了…    
  反正有9条命嘛    
  就躺在铁轨上 ….    
  结果一辆列车开过去 ….    
  那人照旧死了 …    
  这是怎么吗?    
  因为那列列车的车厢有 10节 …    
    
6.一天,殡仪馆送来了三人,说也出人意料,他们死后的一坐一起都是 ^_^…    
  殡仪馆管理员很纳闷的问 pol.ice :为何他们死后的脸竟然会是
^_^呢?    
  pol.ice说:那… 说来话长… 你看右侧那个家伙…他是跟她爱人在共度春宵时 ..在最心绪的那一刻 .. 受不了..挂了    
  管理员就答应说:唉…愿在花下死 ..做鬼也风骚 …
那中间那个是怎么死的?    
  pol.ice:中间那些喔 …他呀.. 真是人间惨剧…
他走在路上..忽然听见本身中了头彩 .. 奖金 7亿多..    
  他热情洋溢的哈哈大笑时 …却被迎面而来的车给撞上 …结果 ..挂了…    
  管理员回答说:唉
…他实在是不曾福气享受那富饶的后半辈子….那剩下的这个啊?    
  pol.ice: …那七个死的就有点拾壹分了…
他是爬上树的时候被雷给劈死了    
  管理员回答说:… 那就有点窘迫了,被雷劈到怎么还会笑呢 …    
  pol.ice 说:因为她爬上树后以为…..突然一起雷暴 …..    
  他以为.. 有人给他拍照…..    
    
7.话说数千年此前,无论是公狗可能是母狗,他们小便时都以用蹲着的。    
  直到明朝,事情才有了转变 ……    
  李世民大家听过啊!他双亲养了一对北京狗,有叁次广孝皇帝上峨德州祭奠,带了这一对去
……    
  祭到八分之四时,母狗突然内急,于是便跑到一棵树后消除,    
  在祝福时这是那多少个不敬的一言一动,由此惹恼了玉皇上帝,    
  玉皇大帝命令雷王打了3个雷,正好打在树上,树倒了,压死了母狗,公狗看了后头特别恐惧
……    
  从此之后,公狗每一趟在树下小便时,都会伸出贰只脚,用力顶着树,    
  以防树倒下来压到自身……    
捌 、你的1一寸照片片给本人两张好呢?(一定要照得特清晰的那种)做永久的怀恋。笔者要把它贴在袜子上,那样外人一看,就了然是鳄鱼品牌的。  
⑨ 、笔者跟你说因为他跟本身说叫本人决不跟你说未来自家跟你说您绝不跟她说我跟你说过假如他问您自身有没有跟你说你说自家从不跟你说他说您是猪笔者说完了。  
十 、八戒到南朝鲜整容变帅哥。到舞厅找赏心悦目的女生,心绪后八戒问雅观的女生:知道在此以前自身有多丑?小编是猪刚鬣。美丽的女子大惊:二师兄,小编是老沙!  
1壹 、农夫挑大粪,三个**人见到后问:二伯,那酱多少钱一斤?农夫不语,**人用手沾了点放进嘴里,心里想:你不报告笔者不怎么钱一斤,作者也不告诉你你的酱臭了!  
1② 、一人骑摩托车习惯反穿毛衣。二次相遇交通事故驾鹤归西了。**赶来后看到旁边有位老人,就向老年人了然当时情况。老汉说:笔者见到她时,他还有气,小编见状他的头部拧到前边去了,就把她的头颅拧了回去,他就完蛋了。  
1③ 、那天小编看见你了,在超级市场。你私行的把手伸到条码扫描器上,只见显示器上显得:猪蹄8元。你觉得机器坏了,把脸凑过去看,显示器上出示:猪头肉5元。  
1四 、某天你站在公共交通站台上哈哈大笑,引得路人像看稀有动物似的看你。在这之中一个人问您为啥傻笑,你强忍住笑,得意的说:小编把领票的耍了,买了票没有上车。  
1伍 、一天你蹲在马路边上,仔细的看着一堆便便。你闻一闻,难道是便便?你用手抠抠,好像是便便。你放进嘴里尝一尝:果然是便便!你好心满意足啊::幸亏没有踩到!  
1⑥ 、一少妇裸泳于山间幽潭,一蛙误入其洞,觉舒适,遂定久居。数过后,妇觉下体不适,寻医问诊。大夫从妇下体中取出一蛙尸及一遗书。遗书曰:日日遭棍殴,生比不上死。  
1柒 、某校老师颇恶,学生们遂设计整之。22二十四日课上,一男人面露伤心之色,捂腹轻轻呻吟。老师未加理会继续教授。当教师转身板书之际,听到后边传来“呕….哇”一声。该男生同桌偷偷将一罐八宝粥倒于桌上。老师回头只见此生桌面布满黄白之物,污秽不堪。此时,另一哥们拿起2头小勺,一勺一勺舀起来吃,还道:“哇,那哥俩晚上吃的花生米嘿!”老师见到,狂吐不止。    

背景

数量在仓库中的存款和储蓄地方

指南针平日不会由大家显示的采用,它们由集体语言运维时(CLOdyssey)来治本。指针(或引用)是差别于引用类型的,是因为当我们说有个别事物是多少个引用类型时就代表大家是因此指针来走访它的。指针是一块内部存款和储蓄器空间,而它指向另二个内部存款和储蓄器空间。就像是栈和堆一样,指针也一律要私吞内存空间,但它的值是1个内部存款和储蓄器地址大概为空。(笔者复制的,小编也不太懂)

仓库在内部存款和储蓄器中能够理解为三个不等的容器。

命令,在本身参考的文书档案里好像并不曾关系,作者明白的是,当JIT编写翻译器把艺术的IL语句变为机器语言后,会将其存入到贰个动态分配的内部存储器空间,然后将地址重返给CLOdyssey的3个内部数据结构表(此表记录三个类里面包车型地铁富有办法的地方),因为指令相当于值类型,具体存款和储蓄地点能够参考值类型。

值类型重点关怀struct,因为其便于被认为成引用类型,而且其储存的多寡有时非常的大,传值时最棒用ref;

上次写了一篇文章关于try finnally的有的难题(被作者用windows live覆盖了,草),后来通过大神们解释,小编晓得了在本人理解了try、finnally运转原理后,还欠缺的便是关于值类型引用类型在内部存款和储蓄器中的储存难题。

自作者仔细拜读了有的大神们的小说,首要的参考试场点是三个连串小说《译文—C#堆VS栈》,里面详细解释了库房的要领,基础差的飞禽走兽们就别看笔者那个计算了。


图片 1栈:栈就是一个先入后出的蕴藏空间,必须依据顺序依次执行。比图片 2如一筒羽球,唯有1个出入口,假使想取出来球,只好先把最终塞入的分外球拿出去才能两次三番拿任何的球。

值类型赋值就是一种深拷贝,即将值的内容传递过去,且不会受相互操作的熏陶。

引用类型赋值是一种浅拷贝,只是将引用类型的地址传递了千古,比如A =
B,那么A、B的操作都会相互影响。当然,string是一种特例,赋值或许传参后不会相互影响。假使您想引用类型也能举行深拷贝,就要和谐写Clone()方法了。

空间分配及回收

堆和栈那里的分别具体不解释,能够查占卜关文书档案,那里引用一个人长辈的比方来探望: 
  
使用栈就象大家去商旅里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等备选干活和洗碗、刷锅等收尾工作,他的好处是高效,不过自由度小。 

  
使用堆就象是友好入手做喜欢吃的小菜,相比麻烦,不过比较适合自个儿的脾胃,而且自由度大。比喻很形象,说的很通俗易懂,不晓得你是或不是有点取得。

   引用类型总是在堆上成立,然后将地方重回,地址的保留地方接近与值类型。

  
值类型的储存地方和注明它的类型有关。当Main()执行的时候,会分配2个栈区,借使在Main()里面证明了值类型,那么它就会保留在那一个栈上;要是Main()先声明了三个struct,而struct里面申明了值类型,那么那么些值类型也如出一辙保存在栈上,因为宣称这些值类型的档次即struct也在栈上;而假使注解值类型的种类是3个引用类型,比如3个类,那么那一个值类型就会保存在堆上。

赋值时的区分

怎样是仓库

引用类型关心string,因为其就算是援引类型,不过表现上是值类型,即透过形参传入的string数据的操作不会潜移默化实参。

堆:堆也是二个按序排列的囤积空间,分歧的是,堆里面包车型客车多少年足球以随便取。比如教室里的书都以遵守一定顺序排列的,不过取书的时候,能够一贯拿出去本人索要的图书而不用管其余的书籍。

 

在仓库上保留的数额分为各个:值类型、引用类型、指针、指令。

举例

以下是自身想的多个例子,假若您都能答对且知道原理,则印证你至少明白了库房。

① 、引用类型赋值,修改某一个引用类型,会有怎么着结果

       static void Main(string[] args)
        {
            var my = new MyInt();
            var you = my;
            you.index = 1;
            you = null;
            Console.WriteLine(my.index.ToString());
            Console.ReadLine();
        }
        public class MyInt
        {
            public int index;
        }

结果是:1;而且尚未回来格外。(重庆大学是为何没发生特别)?

贰 、引用类型传递和指针传递(ref代表传递的是指针)的界别

      static void Main(string[] args)
        {
            Program main = new Program();
            var my = new MyInt();
            main.CommonMethod(my);
            Console.WriteLine(my.index.ToString());
            main.RefMethod(ref my);
            Console.WriteLine(my.index.ToString());

            Console.ReadLine();
        }

        public void CommonMethod(MyInt myInt)
        {
            myInt.index = 1;
            myInt = null;
        }

        public void RefMethod(ref MyInt myInt)
        {
            myInt.index = 2;
            myInt = null;
        }
        public class MyInt
        {
            public int index;
        }

结果是1,然后至极;(为啥引用类型传递不足够,而指针传递非凡)?


花色存在地方的定律

  1. ### 引用类型总是在堆上创立。

  2. ### 值类型和指针类型总是在它注解的地方创建。

疑问

数据结构的栈和内部存款和储蓄器中的栈有何界别吧?网上说数据结构的栈是三个驳斥,五个是达成形式,那么数据结构中的队列,在内部存款和储蓄器中有怎么着达成呢?仍旧说网上的布道是一无所能的?

可望大神们帮自身解释一下。