Что означает интструкция ret(il код)

230
29 декабря 2021, 23:40

Имеется такая строчка в методе на il: "IL_0007: ret". Что это значит ? (Понятно, что это связано с окончанием метода, но как конкретно)

Answer 1

IL многое почерпнул из набора инструкций 8086. RET означает return, то есть возврат из метода.

Вызов процедур и возврат на низком уровне реализован с помощью стека. Инструкция CALL сохраняет в стеке адрес инструкции, которая следует сразу за ней и передаёт управление туда, куда вы ей указали.

Когда процессор встречает инструкцию RET, он извлекает из стека адрес следующей инструкции и передаёт управление на неё. Из-за того, что адрес возврата хранится не в регистрах, а в стеке, размер которого достаточно большой, процедуры могут вызывать друг друга столько раз, сколько потребуется.

Впрочем, если вы допустили ошибку в программе, или запустили рекурсивную функцию на очень больших данных, стек всё-таки может оказаться переполненным. Именно ошибка переполнения стека — stack overflow — дала название этому сайту, где мы задаём и отвечаем на вопросы.

READ ALSO
обработка всех строк в DataGridView

обработка всех строк в DataGridView

Пытаюсь по нажатию кнопки обработать все строки в гридеВ моем случае есть грид с сообщениями

240
Не срабатывает таймер

Не срабатывает таймер

Имеется сервис, который собирает данные и отправляет в другой сервисСервис работает в докер-контейнере

180