zoukankan      html  css  js  c++  java
  • .Net中值类型和引用类型

    装箱 就是把“值类型”转换成“引用类型”(Object);

    拆箱 就是把“引用类型”转换成“值类型”;

    引用类型:基类为Objcet

    值类型:均隐式派生自System.ValueType: 

    值类型:byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型

    引用类型:string 和 class统称为引用类型。

    说起值类型和引用类型就会说到堆和栈的问题,那什么是堆什么是栈呢?他们之间又有什么区别的呢?

    https://www.cnblogs.com/lanr/articles/5723920.html

    1、堆栈空间分配

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

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

    2、堆栈缓存方式

    栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

    堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

    3、效率比较

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

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

    4、存储内容

    栈: 在函数调用时,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。

    当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向函数的返回地址,也就是主函数中的下一条指令的地址,程序由该点继续运行。

    堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排

     
  • 相关阅读:
    详解并发和并行意义
    MoleHill Getting Started AGAL(转)
    解决setInterval计时器不准的问题
    Flash视频播放器开发经验总结
    利用pushState开发无刷页面切换
    用小乐图客抓取人人网照片
    如何在Flash中新窗口打开页面而不被拦截
    响应式开发总结
    用Asroute解决复杂状态切换问题
    对iframe跨域通信的封装
  • 原文地址:https://www.cnblogs.com/gyjjyg/p/12442774.html
Copyright © 2011-2022 走看看