在我编程的时候,一直不清楚数值类型和引用类型被编译后对内存和cpu而言的作用?

解决方案 »

  1.   

    ref:http://book.csdn.net/bookfiles/187/1001878593.shtml
    在把数据赋给值类型和引用类型的时候,两者表现完全不同:
    在把数据赋给一个值类型时,数据存储在堆栈上的变量中。
    在把数据赋给一个引用类型时,变量中只存储一个引用,数据则存储在托管堆上。
    理解堆栈和堆之间的区别是非常重要的。堆栈是一个比较小的内存区域,进程和线程在其中存储大小固定的数据块。例如,无论数据的实际值是多少,存储整数和小数类型所需要的字节数都不会变化。因此这种变量在堆栈中的位置可以高效地确定(当一个过程需要提取某个变量时,就必须搜索堆栈。如果堆栈包含的变量具有动态的内存大小,这种搜索就需要较长的时间)。引用类型没有固定的大小。例如,字符串的大小可以在2字节到接近系统中所有的可用内存之间变化。引用类型大小的不确定性意味着,它们包含的数据更适合存储在堆上,而不是堆栈上,但是,引用类型的地址(即数据在堆上的位置)有固定的大小,所以可以存储在堆栈上。把引用存储在堆栈上,整个程序的运行速度会快得多,因为进程可以快速定位与变量中的数据。固定大小的变量和大小动态变化的变量分别存储在堆栈和堆上,会使对这两种变量的操作方式产生差异。
      

  2.   

    C#的表达式,类型和变量 
    "变量"仅仅是数据的存储位置。你可以把数据存放到其中,或者从中取出来作为C#表达式的一部分。变量中所存放的数据的含义是通过类型来控制的。 C#是个强类型(???)的语言。这样,一切对变量的操作都是针对该变量的类型而进行的。为了保证变量中所存放数据的合法性和一致性,对不同类型的变量进行操作有相应的规则。 C#语言的简单类型包含布尔类型和三种数值类型:整型,浮点型和小数。
      

  3.   

    这是一个看似简单,而难倒很多英雄好汉的问题。
    从C#代码到CPU中间不知道隔了多少层,建议楼主先去搞清楚一些计算机的基础知识,例如堆和堆栈,操作系统在程序执行中扮演的角色,虚拟机所扮演的角色,x86指令集,汇编语言等……
      

  4.   

    我想知道这些对c#的理解将会是质的飞跃!谁能用通俗的语言来把类型在cpu中的作用说清楚呢?
      

  5.   

    我想知道这些对c#的理解将会是质的飞跃!飞太远会掉下去……
    好吧,在CPU那里根本就没有类型。
    OK?x86的CPU对于数据只有两种认识:寄存器中的,堆栈中的。
    数据的类型只有8位16位32位和64位(如果是64位的处理器)。
    一个变量,在它到CPU那里很早很早之前,就被优化肢解的看不见了……
      

  6.   

    和CPU没有关系!和你的内存有关系!和你的程序有关系!
    引用类型只是添加了一个指针,没有new一个新的实例出来。
    值类型会在内存中新开辟一个区域,也就是会new一个实例。