![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Всем привет
Прочитал одну статью http://www.technovelty.org/c/gcc-trampolines.html в которой обсуждается пример вложенных (nested) функций. сначала показывается прямой вызов nested функции и через указатель. в первом случае трамплин не генерится, всё типа хорошо, кроме того, что мы по прежнему остаемся в стеке родительской функции. во втором примере мы вызываем nested функцию через указатель и тут генерится трамплин помогите понять фразу автора
не понимаю чем чревато отсутствие трамплина во втором случае? то что указатель на саму nested функцию может быть доступен ей самой? или что? и что собственно сделает сам трамплин? спасибо |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Автор говорит, что 'вложенной функции' недостаточно просто ее адреса. Она должна быть вызванна с указателем стека, который показывает в фрейм охватывающей функции. Соотвественно, что бы правильно вызвать вложенную функцию, необходимо не только иметь указатель на нее, но и иметь указатель стекового фрейма, где ее надо вызвать. К сожалению в С нет понятия 'указатель на вложенную функцию' (с неявным дополнительным параметром - стековым фреймом), а есть просто 'указатель на функцию'. У него этого дополнительного параметра нет, так чо приходится делать трамплин, что бы он смог вычислить недостающий указатель на фрейм и установить его, перед вызовом |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
xvr,
я правильно понимаю, что это касается только вызова через указатель? ведь когда был явный вызов, было видно, что никаких трамплинов не генерилось и новый фрейм стека не требовался? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
спасибо
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |