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不会再有太大的改动了,高级语言的那些语法糖只是在编译器上做文章。

  • 相关阅读:
    六 . 爬虫 Xpath介绍和使用
    五. 爬虫 正则表达式
    四 . 爬虫 BeautifulSoup库参数和使用
    三 . 爬虫 url编码
    一 . 爬虫
    【HDU5952】Counting Cliques
    【HDU5521】Meeting
    【模板】回文自动机
    【CF1218E】Product Tuples
    【洛谷P2485】计算器
  • 原文地址:https://www.cnblogs.com/Jax/p/1377838.html
Copyright © 2011-2022 走看看