• C#-CLR-4类型基础(和函数执行原理-重要)


    4.4运行时的相互关系 (源代码、IL、JIT编译的代码之间的关系)

    • CLR创建线程时,会创建1M的栈。用于方法传递实参和方法内部的局部变量。(高位向低位构建)

    • 线程栈的工作流程:
      执行的前后会有两个额外的方法初始化和收尾处理。
      A、局部变量压入栈
      B、
      C、

    下图过程解释:

    • 1 堆中初始化类型对象--注意是“类型对象”而非“对象”(类型对象指针、同步块索引、静态变量和方法表)
    • 2 初始化对象所有字段为null或者0。
    • 3 new 操作返回对象e,保存到线程栈。
    • 4 调用Employee的静态方法Lookup。CLR定位到类型对象,在类型对象的方法表查找改方法对应的记录项,对方法JIT编译(如有需要),再调用JIT编译好的代码。
    • 5 GetYearsEmployed 同理
    • 6 调虚实例方法GetProgressReport。调用时,JIT编译器要在方法中生成一些额外的代码(方法每次调用都会执行)。这些代码先检查发出调用的对象(e指向的对象),检查对象内部的“类型对象指针”成员(该成员指向对象的实际类型),然后类型对象方法表中查找被调用方法的记录项,同理以上4中的后面部分。
    • 补充:
      Type类型对象的类型对象指针指向自己。
  • 相关阅读:
    如何保证service不被系统杀死
    查找算法
    java多线程学习
    设计模式-单例
    Python2.7-内置类型
    Python2.7-内置函数
    准备要学的东西
    Python-2.7 : 编码问题及encode与decode
    【JZOJ4637】大鱼海棠【博弈论】
    【JZOJ4637】大鱼海棠【博弈论】
  • 原文地址:https://www.cnblogs.com/Jaysonhome/p/13292355.html
Copyright © 2020-2023  润新知