Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > inline функции..и размер


Автор: Coocky 1.12.2005, 16:22
Спор тут зашел.. smile
При использовании inline фуункции что теряем-размер исполняемого файла или размер занимаемой памяти , при выполнении проги smile

Автор: Darhazer 1.12.2005, 16:25
размер исполняемого файла конечно ;)

Автор: Coocky 1.12.2005, 16:41
Тут сравнение идет на Билдере и VC.
Как-то по разному ведут себя.
У первого exe растет, у второго память немного,а exe не меняется smile

Автор: nikitao 1.12.2005, 17:03
Да не может этого быть.Inline ф-ция это тоже самое,что ты в кпждом ее использовании фактически вбиваешь сам текст ф-ции.Т е размер exe должен увеличеваться,но и скорость тоже smile

Автор: Coocky 1.12.2005, 17:18
Цитата(nikitao @ 1.12.2005, 17:03)
Да не может этого быть.

Если бы я был Пинокио, у меня б все равно нос не вырос .Проверь smile
Я может какие опции не включил, но пока по умолчанию smile

Автор: Darhazer 1.12.2005, 17:45
А в принципе все зависить от компилятора. Компилятор не должен каждую inline функцию сделать inline и можеть сам решить коротких функциях сделать inline. Но по логике -> размер файла должен увеличиться

Автор: darkart 1.12.2005, 18:14
Если компилятор соблаговолит сделать ф-цию Inline то размер exe увеличивается, а скорость ..., вобщем зависит от inline ф-ции.

Автор: Earnest 1.12.2005, 19:42
Не все так уж однозначно.
Если функция такая:
Код

int getAAA { return m_AAA; }

то, если сделать ее Inline, то размер кода только уменьшится... Не надо забывать про прологи-эпилоги, и прочие записи адреса возврата в стек...

Автор: srd 3.12.2005, 14:36
Среднестатический компилятор умнее среднестатического программиста. Он может сам встраивать не-inline функции, и может не встраивать inline-функции smile

Автор: Mephistopheles 3.12.2005, 14:39
Цитата
У первого exe растет, у второго память немного,а exe не меняется

Всё зависит от компилера. Он сам решает ставить функцию, как inline или нет.
Чтобы он стопудово втыкал, надо юзать __forceinline, но это стандарт Мелкомягких, а соответсвенно не кросплатформенный.

Автор: bel_nikita 3.12.2005, 15:02
Coocky
Поиком бы воспользовался smile Не раз уже обсуждали.

inline — не более чем совет компилятору, а делать ее или нет — его личное дело.

Цитата(Mephistopheles @ 3.12.2005, 13:39)
Чтобы он стопудово втыкал, надо юзать __forceinline, но это стандарт Мелкомягких, а соответсвенно не кросплатформенный.

Неа, не стопудово smile Для VC6, к примеру, не всегда стопудово прокатывает smile

Автор: maxim1000 3.12.2005, 15:26
exe-шник не всегда увеличивается при увеличении размера исполняемого кода, иногда он будет оставаться таким же
дело в том, что часто различные его части не просто записаны в файл друг за дружкой, а выровнены каким-либо образом для ускорения загрузки
так что если код увеличился, но все равно не перестал помещаться в свою область, exe-шник останется по размеру тем же...

Автор: DeadSoul 3.12.2005, 15:33
Цитата(bel_nikita @ 3.12.2005, 15:02)
inline — не более чем совет компилятору, а делать ее или нет — его личное дело

И дядя Саттер не рекомендует делать функции inline, т.к. любой профайлер может сказать, что данную функцию стоит делать inline, но ни один не скажет, что ее не надо делать inline

Автор: Mephistopheles 4.12.2005, 06:01
Цитата
Неа, не стопудово Для VC6, к примеру, не всегда стопудово прокатывает

Гон, не должно быть так. __forceinline для этого и создан, чтобы "насиловать". smile

Автор: oberonchik 4.12.2005, 10:22
Там в опциях компилятора наверняка ещё должен быть размер функции, которую можно делать инлайн.
По крайней мере под никсами в gcc такой параметр есть.

Автор: Earnest 4.12.2005, 21:59
Цитата(Mephistopheles @ 4.12.2005, 06:01)
не должно быть так

У виндуса много чего "не должно быть так". Но есть.
По крайней мере, вышеприведенное утерждение bel_nikita про forceinline абсолютно справедливо.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)