Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Роль меток в программном коде CIL

Роль меток в программном коде CIL

Вы. конечно, заметили, что в каждой строке программного кода реализации содержится префикс в форме лексемы IL_XXX: (например, IL_0000: IL_0001: и т.д.). Эти лексемы называются метками кода, и они могут иметь любой вид, какой вы только пожелаете (лишь бы они не дублировались в пределах одного и того же контекста). При записи содержимого компоновочного блока в файл с помощью ildasm.exe автоматически генерируются метки кода, имеющие вид IL_XXX:. Но вы можете изменить их с тем, чтобы они стали более информативными.

.method private hidebysig static void Main(string[] args) cil managed {
 .entrypoint
 .maxstack 8
 Nothing_1: nop
 Load_String: ldstr "Hello CIL code!"
 PrintToConsole: call void [mscorlib]System.Console::WriteLine(string)
 Nothing_2: nop
 WaitFor_KeyPress: call string [mscorlib] System.Console::ReadLine()
 RemoveValueFromStack: pop
 Leave_Functlon: ret
}

Суть в том, что большинство меток кода совсем необязательно. Единственным случаем, когда метки кода оказываются по-настоящему полезными (и обязательными), является случай, когда в программном коде CIL используются ветвления или циклические конструкции. Например, в нашем случае вы можете исключить метки вообще.

.method private hidebysig static void Main(string[] args) cil managed {
 .entrypoint
 .maxstack 8
 nop
 ldstr "Hello CIL code!"
 call void [mscorlib]System.Console::WriteLine(string)
 nop
 call string [mscorlib]System.Console::ReadLine()
 pop
 ret
}

Оглавление книги


Генерация: 1.180. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз