1

在 LocalVarSig 语法图中,CustomMod 和 Constraint 元素处于循环中,因此这意味着可以有多个 Constraint 元素。如果有多个 Constraint 元素,它的语义是什么?谢谢!

4

1 回答 1

1

从 ECMA-335 §II.23.2.9 开始,强调添加:

Signatures 中的 Constraint 项目前只有一个可能的 ELEMENT_TYPE_PINNED (§II.23.1.16),它指定目标类型被固定在运行时堆中,并且不会被垃圾回收的动作移动。

约束只能在 LocalVarSig(而不是 FieldSig)中应用。

唯一可能的约束值也是如此pinned,至少在当前版本的 CIL 中是这样。

那么,多个实例是否pinned有效?看起来是这样。汇编器 (ILasm) 接受一个局部变量的多个实例:

.locals init (int32& pinned pinned pinned x)

如果我组装它然后反汇编它(ILdasm),生成的 IL 将保留重复的pinned关键字。使用MdDumper 查看程序集还会显示表中的重复0x45字节StandAloneSig

我没有看到任何具有多个pinned约束的验证差异,所以我认为它们是多余的,相当于只有一个pinned.

于 2018-09-27T01:24:05.077 回答