在我编程的时候,一直不清楚数值类型和引用类型被编译后对内存和cpu而言的作用?
解决方案 »
- 关于mdi窗口
- 多线程问题
- 在VS2005中遇到的问题!帮忙看一下
- 请问: .net如何开发手机内嵌软件?请给些参考资料和教程,谢谢!
- 如何把对称密钥 或者 非对称密钥添加到上传软件中(c#)
- 关于命名空间的问题
- 第一次提问,您的回复,我的动力!问题很简单……
- 手机通过浏览器与PC端软件通讯-征求方法
- 在程序运行中动态加载图像所涉及的问题??????????
- ★如此简单的“char *tempin = new char[100];”造成 NullReferenceException错误,狂晕!重分!!!
- 把长度为a的线任意折成3条,问能折成一个三角形的概率是多少? 用程序怎么实现。
- .net远程连接SQL server的问题~ 急~ 在线等~
在把数据赋给值类型和引用类型的时候,两者表现完全不同:
在把数据赋给一个值类型时,数据存储在堆栈上的变量中。
在把数据赋给一个引用类型时,变量中只存储一个引用,数据则存储在托管堆上。
理解堆栈和堆之间的区别是非常重要的。堆栈是一个比较小的内存区域,进程和线程在其中存储大小固定的数据块。例如,无论数据的实际值是多少,存储整数和小数类型所需要的字节数都不会变化。因此这种变量在堆栈中的位置可以高效地确定(当一个过程需要提取某个变量时,就必须搜索堆栈。如果堆栈包含的变量具有动态的内存大小,这种搜索就需要较长的时间)。引用类型没有固定的大小。例如,字符串的大小可以在2字节到接近系统中所有的可用内存之间变化。引用类型大小的不确定性意味着,它们包含的数据更适合存储在堆上,而不是堆栈上,但是,引用类型的地址(即数据在堆上的位置)有固定的大小,所以可以存储在堆栈上。把引用存储在堆栈上,整个程序的运行速度会快得多,因为进程可以快速定位与变量中的数据。固定大小的变量和大小动态变化的变量分别存储在堆栈和堆上,会使对这两种变量的操作方式产生差异。
"变量"仅仅是数据的存储位置。你可以把数据存放到其中,或者从中取出来作为C#表达式的一部分。变量中所存放的数据的含义是通过类型来控制的。 C#是个强类型(???)的语言。这样,一切对变量的操作都是针对该变量的类型而进行的。为了保证变量中所存放数据的合法性和一致性,对不同类型的变量进行操作有相应的规则。 C#语言的简单类型包含布尔类型和三种数值类型:整型,浮点型和小数。
从C#代码到CPU中间不知道隔了多少层,建议楼主先去搞清楚一些计算机的基础知识,例如堆和堆栈,操作系统在程序执行中扮演的角色,虚拟机所扮演的角色,x86指令集,汇编语言等……
好吧,在CPU那里根本就没有类型。
OK?x86的CPU对于数据只有两种认识:寄存器中的,堆栈中的。
数据的类型只有8位16位32位和64位(如果是64位的处理器)。
一个变量,在它到CPU那里很早很早之前,就被优化肢解的看不见了……
引用类型只是添加了一个指针,没有new一个新的实例出来。
值类型会在内存中新开辟一个区域,也就是会new一个实例。