| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > трамплинные функции gcc |
| Автор: null56 10.10.2013, 15:35 | ||
| Всем привет Прочитал одну статью http://www.technovelty.org/c/gcc-trampolines.html в которой обсуждается пример вложенных (nested) функций. сначала показывается прямой вызов nested функции и через указатель. в первом случае трамплин не генерится, всё типа хорошо, кроме того, что мы по прежнему остаемся в стеке родительской функции. во втором примере мы вызываем nested функцию через указатель и тут генерится трамплин помогите понять фразу автора
не понимаю чем чревато отсутствие трамплина во втором случае? то что указатель на саму nested функцию может быть доступен ей самой? или что? и что собственно сделает сам трамплин? спасибо |
| Автор: xvr 10.10.2013, 18:54 |
Автор говорит, что 'вложенной функции' недостаточно просто ее адреса. Она должна быть вызванна с указателем стека, который показывает в фрейм охватывающей функции. Соотвественно, что бы правильно вызвать вложенную функцию, необходимо не только иметь указатель на нее, но и иметь указатель стекового фрейма, где ее надо вызвать. К сожалению в С нет понятия 'указатель на вложенную функцию' (с неявным дополнительным параметром - стековым фреймом), а есть просто 'указатель на функцию'. У него этого дополнительного параметра нет, так чо приходится делать трамплин, что бы он смог вычислить недостающий указатель на фрейм и установить его, перед вызовом |
| Автор: null56 11.10.2013, 12:14 | ||
xvr,
я правильно понимаю, что это касается только вызова через указатель? ведь когда был явный вызов, было видно, что никаких трамплинов не генерилось и новый фрейм стека не требовался? |
| Автор: bsa 11.10.2013, 12:41 |
| Да. Правильно. Так как неизвестно, кто и когда вызовет эту функцию. |
| Автор: null56 11.10.2013, 13:21 |
| спасибо |