Цитата(_zorn_ @ 13.9.2013, 06:28 ) | | Какое может быть соглашение о вызовах в инлайновых функциях ? Ты хоть их смысл понимаешь ? |
Понимаю. С точки зрения языка высокого уровня это вызов функции, а на низком уровне он заменяется встраиванием тела функции. Конечно, в данном случае говорить о соглашении именно о вызовах не корректно, так как в действительности вызов то как раз и исключается, я просто по привычке использовал максимально близкое известное мне понятие. Ну так как? Можно PE формат перебазировать при каждом встраивании? Или может лучше сочинить свой формат? С 64-х битными смещениями, секцией перечисления перебазирумых адресов и длинными именами секций вместо 8-ми байтных? Что будет проще: разобраться в PE, или сочинить что то своё?
Добавлено @ 07:36
Цитата(_zorn_ @ 13.9.2013, 06:28 ) | | А какой код сгенерируется компилятором при встраивании совершенно не важно, главное чтобы регистры, используемые после ее "вызова" (встраивания) восстановил и стек выровнял. |
Важно. Код должен соответствовать задаче. Желательно всё таки не заворачивать во все ссылки по указателю, чтоб не притормаживать на косвенном доступе. Это остаётся на крайний случай: предать параметры в обратном через стек, через него же вернуть значение, а параметры ссылочных типов передать по адресам. В случае вызываемых функций другого способа реализовать изменяемые параметры нет, поэтому там в ссылки будут завёрнуты указатели. А для инлайновых желательно всё таки от этого избавиться, так как именно ради прямого обращения сразу к данным вызывающей подпрограммы инлайн и задуман.
|