zoukankan      html  css  js  c++  java
  • 《Expert .NET 2.0 IL Assembler》 译者笔记 2

    第8章 基本类型和签名

    基本类型就那么几种,都在表8-1中列出了。此外,还提到了数据指针类型和函数指针类型。

    CLR中有两种类型的数组——向量和多维数组。它们的创建方式不同,从而布局也不同。

    以上都是炒“冷饭”,学过一点C#都多少知道一点,而修饰符才是一个有趣的特性。4种修饰符各有用途:

    修饰符modreq和modopt,用于托管/非托管封送的返回类型或方法参数上。在将非托管方法封送为托管方法时尤其有用,从而区分在C++中不同但在CLR中相同的类型,如C++中的int和long,都对应CLR中的E_T_I4。

    修饰符Sentinel,也就是...,也就是vararg方法中可选参数和固定参数的中间分隔符号。

    修饰符pinned只适用于方法的局部变量,一旦指定,该变量不会进行垃圾收集。

    由CLR识别的非托管类型,又称为“本地的”(native),位于CorHdr.h的枚举CorNativeType中。其中,值得一提的是N_T_ARRAY的参数<sizes>。

    在签名中的类型引用,有CLASS和VALUETYPE,还有OBJECT和STRING。

    终于说到签名了。篇幅不大,但极其精辟。

    像字段、方法和局部变量这样的程序项,并不是直接使用编码类型来描述的;而是通过签名来描述的。签名是包括一个或多个编码类型的字节数组,驻留在元数据的#Blob流中。

    使用签名的元数据表有:Field表、Method表、Property表、MemberRef表、StandAloneSig表(间接调用签名)、TypeSpec表(局部变量签名)。

    签名的第一个字节标识了这个签名的类型,出于历史原因,称为签名的调用约定。

    第11章 泛型类型

    在CLR 1.1的时代,就已经在IL中为泛型预留出了位置,这使得从.CLR 1.1升级为2.0极其简单——只是增加了几个元数据表。我们可以将其想象为抽象工厂模式,以添加一个维度的方式,达到翻倍的效果。

    T^1这样的符号是多么的神奇,以至于我们不需要学太多的新东西。所以非泛型的技术,在泛型中仍然适用。

    CLR不会再有太大的改动了,高级语言的那些语法糖只是在编译器上做文章。

  • 相关阅读:
    AVL自平衡二叉树
    笔试+面试信息整理----面向笔试学习、面向面经编程
    传入值参数&传入引用参数的区别
    NLPIR智能挖掘实现行业大数据应用价值
    NLPIR大数据挖掘融合库、智、理三大先进理论技术
    NLPIR智能语义挖掘文本大数据深层意义
    NLPIR智能语义技术从采集到分析一步到位
    灵玖软件:NLPIR智能挖掘对文本数据精细化分析
    九眼合同智能审核系统运用NLPIR大数据技术进行核查
    NLPIR九眼智能审核平台助合同文本深度核查
  • 原文地址:https://www.cnblogs.com/Jax/p/1377838.html
Copyright © 2011-2022 走看看