241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
|
|
1 | |
Зачем нужен inline06.10.2009, 23:36. Показов 45960. Ответов 31
Скажите пожалуйста, зачем нужна команда inline? Изучаю классы, и там говорится мимолётом, что эта функция повысит эффективность, но так и не понял зачем она нужна. Желательно пример с комментарием. Зараннее благодраю за скорый ответ.
0
|
06.10.2009, 23:36 | |
Ответы с готовыми решениями:
31
Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline? inline функции vs инструкции inline функций Зачем нужен return? зачем нужен параметр |
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
06.10.2009, 23:42 | 2 |
завидев такую конструкцию, компилятор может встроить тело функции немостредственно в точку вызова. таким образом код распухает, но за счёт отказа от вызова функции может работать быстрее
1
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
06.10.2009, 23:42 | 3 |
Компилятор просто заменяет вызов функции, кодом самой функции. Это чаще всего применяется для маленьких по размеру функций. Компилятор, все равно, сам решит инлайнить функцию или нет. А зачем пример? Самое обычное объявление функции, просто с ключевым словом inline и все.
1
|
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
06.10.2009, 23:45 | 4 |
Syltan, инлайн функция перемалывается компилятором так,что фактического вызова не происходит,ее код "копируется" туда,откуда она вызвана. Для часто вызываемых,но очень коротких функций, inline выгодно указывать,для остальных не принципиально. Надо сказать,что современные компиляторы плевать хотели на указание директивы инлайн, т.е посчитав,что это не выгодно,они проигнорируют желание программера. Выглядит это примерно так : "Слушай,компилятор,вот эту бы функцию хорошо бы встраивать.."... "Молчать,человечишко,мне виднее" - отвечает ему компилятор. Теоретически, после этого программер может обидеться и сказать "__forceinline",после чего железке останется только повиноваться(если это возможно). Это поведение актуально для Visual Studio. Старенький борланд си вряд ли решится спорить,но тут уж я не могу утверждать. Подробнее про поведение компилятора нужно читать в его справке. Для вижуал студии читать тут
5
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
06.10.2009, 23:47 | 5 |
Обрати внимание только, что inline - это не приказ, а нижайшая просьба к компилятору: "Милостивый государь, будьте так любезны, попытайтесь заинлайнить эту функцию, пожалуйста." - каковую просьбу компилятор может выполнить, а может и проигнорировать. Поэтому рассчитывать на то, что функция будет обязательно заинлайнена, нельзя. Как карта ляжет.
1
|
07.10.2009, 00:16 | 6 |
Сообщение было отмечено как решение
Решение
На самом деле смысл модификатора не только в том, что это типа просьба проинлайнить функцию. Этот модификатор переводит функцию в разряд так называемых multiply defined. Технически символ для этой функции становится weak'ом. Если по простому, то функцию с модификатором inline можно помещать в файл *.h. Даже если функция не будет проинлайнена, то множественное её определение в разных модулях компиляции не вызовет слома при линковке.
Причём в стандартном Си этого модификатора нет, только в Си++, Си99, GNU C. Причём во всех языках работа с модификаторм идёт по разному. Когда-то с этим вопросом пришлось поразбираться, если завтра не забуду - на работе записано должно быть
13
|
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
07.10.2009, 00:38 | 7 |
1
|
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
|
||||||
07.10.2009, 13:16 [ТС] | 8 | |||||
0
|
07.10.2009, 13:44 | 9 |
Далее я написал "Если по простому..." - это и есть расшифровка. Те, кто разбираются, те поймут, что значит weak. Те, кто не разбираются - начиная со слов "Если по простому" следует некое грубое пояснение на пальцах
1
|
241 / 9 / 7
Регистрация: 27.08.2009
Сообщений: 868
|
|
07.10.2009, 13:46 [ТС] | 10 |
Хорошо,скажите что такое weak и всё?
0
|
07.10.2009, 14:08 | 11 | |||||||||||||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
Атрибут символьной ссылки в бинарном файле. Забей, всё равно не поймёшь. Для тебя важно лишь то, что функция с модификатором inline может быть определена несколько раз и от этого не будет ошибок на линковке. Грубо говоря
========================================================== Пример. Сделать быстрый интферфейс для вычисления квадрата числа На Си этот вариант выглядел бы так:
Вышеописанный вариант SQR в виде inline-функции более правильно делать в виде шаблона, чтобы так же как и макрос работало для произвольных типов. Но я просто привёл пример для демонстрации того, как этим пользоваться. Надо заметить, что техническая реализация инстанциации шаблонной функции в компиляторе выполняется точно так же, как и для функции с модификатором inline, именно поэтому не возникает конфликтов при линковке
13
|
07.10.2009, 16:44 | 13 |
Я нигде не писал, что модификатор inline используется для декларирования weak'ов. Я писал, что с тезнической точки зрения процедура с модификатором inline становится weak'ом. Тем, кто знает что такое weak, эта фраза заменяет все последующие пояснения
0
|
07.10.2009, 18:06 | 19 |
Убери модификатор и на большинстве компиляторов на высоких уровнях оптимизации ничего не изменится, ибо все они (компиляторы) на этот признак скорее всего кладут и сам решают, инлайнить или нет. Об этом уже писали (в том числе и ты). Поэтому с точки зрения подстановки кода этот модификатор как таковой не нужен
Принципиальное отличие при наличия модификатора я описал. Что там написано не должным образом - я не знаю, этот посыл ты объяснять не возжелал. Дальнейший разговор больше смахивает на детский сад и неконструктивный флуд
2
|
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
07.10.2009, 22:36 | 20 |
Evg очень хорошо все описал.
0
|
07.10.2009, 22:36 | |
07.10.2009, 22:36 | |
Помогаю со студенческими работами здесь
20
Зачем нужен полиморфизм Зачем нужен malloc? Зачем нужен dynamic_cast? Зачем нужен extern? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |