C # / CIL: тип собственного int - PullRequest
       10

C # / CIL: тип собственного int

0 голосов
/ 15 февраля 2019

Я пишу некоторые инструменты, чтобы помочь проверить IL, который испускается во время выполнения.Часть этой проверки включает в себя поддержание Stack<Type>, так как OpCodes испускаются, так что будущие OpCodes, которые используют эти элементы стека, могут быть проверены как использующие надлежащие типы.Однако я не совсем понимаю, как обрабатывать код операции ldind.i.

Документация Microsoft гласит:

Инструкция ldind.i косвенно загружает собственное значение типа int из указанногоадрес (типа native int, & или *) в стеке как native int.

В C # native int не определен, и я не понимаю, какой тип наиболее точно представляет этоданные.Как я могу определить его размер и какой тип C # следует использовать для его представления?Я обеспокоен тем, что это будет зависеть от системного оборудования.

1 Ответ

0 голосов
/ 15 февраля 2019

На мой взгляд, вам лучше посмотреть, как определяется VES, и использовать выделенное перечисление для моделирования типов в стеке, а не видимых типов C #.В противном случае вас ждет сюрприз, когда мы перейдем к типу с плавающей запятой.

Из MS Partition I.pdf 1 , раздел 12.1:

Модель CLI использует стек оценки [...]. Однако CLI поддерживает только подмножество этих типов в своих операциях над значениями, хранящимися в его стеке оценки - int32, int64 и native int.Кроме того, CLI поддерживает внутренний тип данных для представления значений с плавающей запятой во внутреннем стеке оценки.Размер внутреннего типа данных зависит от реализации.

Так что эти вещи, а также такие, как ссылки, являются вещами, которые вы должны отслеживать, и я бы порекомендовал вам сделать это с явной модельюстек VES с использованием его терминов.


1 ECMA C # и общеязыковых стандартов инфраструктуры

...