网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

细说C#中的值类型和引用类型-创新互联

概说:

站在用户的角度思考问题,与客户深入沟通,找到博州网站设计与博州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广、申请域名网站空间、企业邮箱。业务覆盖博州地区。

1.值类型变量中直接储存变量的值,值类型的实例在内存中的储存位置叫栈(stack)。性能很好,值类型只限于存在很小一块的数据(所以的值类型必须小于16字节)
2.引用类型将其数据的地址保存在堆栈中,地址所指向的实际数据,保存在称为堆(heap)的内存区域中。

对于堆和栈:

栈(操作系统):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈

堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

堆(数据结构):堆可以被看成是一棵树,如:堆排序

栈(数据结构):一种后进先出的的数据结构

下面是堆栈的分布:

细说C#中的值类型和引用类型

栈:栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表

细说C#中的值类型和引用类型

堆栈可以从下面几部分区别:

1.申请方式:

stack:

由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间

heap:

需要程序员自己申请,并指明大小,在c中malloc函数

2.申请效率的比较:

栈由系统自动分配,速度较快。但程序员是无法控制的。

堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.

3.申请大小的限制:

栈:在Windows下,是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的大容量是系统预先规定好的,在 wINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。

堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

堆和栈的区别可以用如下的比喻来看出:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大

细说:

C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。

C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。

数组的元素,不管是引用类型还是值类型,都存储在托管堆上。

引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。

值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。

值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。

下面看一个例子:

using System;

namespace TestValve
{
    class MainClass
    {
        class Number1            //类类型属于引用类型
        {
            public int val;
            public Number1(int _val)
            {val=_val;}
            public override string ToString ()
            {
                return val.ToString ();
            }
        }

        struct Number2            //结构类型属于值类型
        {
            public int val;
            public Number2(int _val)
            {val=_val;}
            public override string ToString ()
            {
                return val.ToString ();
            }
        }

        public static void Main (string[] args)
        {
            Number1 n1 = new Number1 (0);    //类类型的实例化
            Number1 n2 = n1;
            n1.val += 1;
            n2.val += 2;
            Console.WriteLine ("n1={0},n2={1}",n1,n2);

            Number2 n3 = new Number2 (0);    //结构类型的实例化
            Number2 n4 = n3;
            n3.val += 1;
            n4.val += 2;
            Console.WriteLine ("n3={0},n4={1}", n3, n4);
            Console.ReadKey ();
        }
    }
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:细说C#中的值类型和引用类型-创新互联
文章出自:http://bjjierui.cn/article/ghsco.html

其他资讯