![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
В теории сказано, что если предварить объявление функции ключевым словом inline, то программа будет выполняться чуточку быстрее, так как компилятор просто вставит код этой функции в то место программы, где она вызывается, а не будет тратит процессорное время для её вызова. Однако, встраиваемыми могут быть только простые и не большие ф-ии, а так же ф-ии, не содержащие в своём теле циклы.
Не могу понять, почему? Какая разница для компилятора, просто копировать тело ф-ии и вставить в место её вызова в основном коде? Хоть циклы, хоть нет. И где кончается "простая" ф-ия и начинается "сложная", которая не будет inline? |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
не циклы, а рекурсию |
|||
|
||||
InvalidProperty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: 2 Всего: 9 |
конкретно для gcc есть директива, которая говорит компилятору, что функция должна быть inline по-любому. Для остальных компиляторов не скажу. Кстати, не понятно, как будет вести себя компилятор в случае этой директивы для функции с рекурсией. -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
|
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
Если в программе есть хоть один указатель на inline функцию, то будит сгенерирован код для этой функции, несмотря на то, что она inline, мало того, если в ней будит рекурсия, то компилятор проигнорирует inline и создаст обычную функцию. Что-то в этом духе написано у Майерса. -------------------- ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Никто не запрещает компилятору/линкеру одновременно реализовывать обычную функцию и инлайнить ее в нужных местах. |
|||
|
||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Из книги "Программирование на С++" Дж.Коплиен. Книга 1992 года ![]()
Это сообщение отредактировал(а) zim22 - 24.4.2009, 12:45 |
||||
|
|||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
Я не сказал, что она не будет встроена, я сказал, что будет сгенерирован эекземпляр. zim22, знаешь сколько выходило спецификаций C++ с 1992 года? =) Не исключено, что сегодня компиляторы ведут себя иначе. -------------------- ![]() |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
mrbrooks,
это теоретическое ограничение связано со сложностями построения синтаксического дерева в большинстве компиляторов эта проблема решается на стадии препроцессора (вроде-бы) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |