inline or not inline?
От: Awaken Украина  
Дата: 07.10.05 12:16
Оценка:
Саттер в своей последней книжке пишет о вредности (точнее бесполезности) ключевых слов auto, register, и inline
мол современный компилятор сам знает что в каком случае надо инлайнить, в зависимости от контекста вызова

что думаете по этому поводу?
я раньше ставил inline и даже __forceinline (MS specific), но последнее время на MSVC++ 7.1 перестал париться с этим — ставлю глобальную оптимизацию , /LTCG и /Ob2
Re: inline or not inline?
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 07.10.05 12:30
Оценка: +1
Здравствуйте, Awaken, Вы писали:

A>Саттер в своей последней книжке пишет о вредности (точнее бесполезности) ключевых слов auto, register, и inline

A>мол современный компилятор сам знает что в каком случае надо инлайнить, в зависимости от контекста вызова

Я, в целом, согласен. Если я не ошибаюсь насчет последней книги , то вот цитата:

...First, we programmers are notoriously bad at estimating what code will be faster or smaller, and where the bottlenecks in our code will be. This includes the authors of this book, and it includes you. Consider: Modern computers feature an extremely complex computational model, often with several pipelined processing units working in parallel, a deep cache hierarchy, speculative execution, branch prediction… and that's just the CPU chip. On top of the hardware, compilers take their best guess at transforming your source code into machine code that exploits the hardware at its best. And on top of all that complication, it's… well, it's your guess. So if you go with nothing but guesswork, there is little chance your ill-targeted micro-optimizations will significantly improve things...

C++ Coding Standards: 101 Rules, Guidelines, and Best Practices

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
HgLab: Mercurial Server and Repository Management for Windows
Re: inline or not inline?
От: Bell Россия  
Дата: 07.10.05 12:54
Оценка:
Здравствуйте, Awaken, Вы писали:

A>Саттер в своей последней книжке пишет о вредности (точнее бесполезности) ключевых слов auto, register, и inline

A>мол современный компилятор сам знает что в каком случае надо инлайнить, в зависимости от контекста вызова

A>что думаете по этому поводу?

Что касается именно встаивания, то я склонен согласится с мистером Саттером
Однако возможности спецификатора inline не онраничиваются робким советом компилятору:здесь
Автор: Vamp
Дата: 11.11.03
Любите книгу — источник знаний (с) М.Горький
Re: inline or not inline?
От: Erop Россия  
Дата: 07.10.05 13:11
Оценка:
Здравствуйте, Awaken, Вы писали:

A>Саттер в своей последней книжке пишет о вредности (точнее бесполезности) ключевых слов auto, register, и inline

A>мол современный компилятор сам знает что в каком случае надо инлайнить, в зависимости от контекста вызова

Ну и правильно пишет, за одним исключением.

Кл. слово inline позволяет определять функции так, что их определения доступны во всех единицах трансляции. Что позволяет, в свою очередь, компилятору, их встраивать, если это выгодно.

Но в кл. слове inline таится подвох.

Вот какой.

Пусть был файл


//  MyFile.cpp

inline void doSmth( my_struct& )
{
    //  тут что-то такое делают
}

//  тут ещё какой-то код, которые зовёт doSmth


Мы его скопировали и модифицировали (например в другую подсистему)

//  MyFileExt.cpp

inline void doSmth( my_struct& )
{
    //  тут что-то такое делают немного другое
}

//  тут ещё какой-то код, которые зовёт doSmth


А потом они от чего-то встретились. Ну и теперь то, хорошо будет работать программа или нет зависит от того подставятся ли функции doSmth или нет
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: inline or not inline?
От: _Winnie Россия C++.freerun
Дата: 07.10.05 13:19
Оценка: 1 (1)
Здравствуйте, Awaken, Вы писали:

A>я раньше ставил inline и даже __forceinline (MS specific), но последнее время на MSVC++ 7.1 перестал париться с этим — ставлю глобальную оптимизацию , /LTCG и /Ob2


А я часто использую __declspec(noinline), что бы не инлайнились (относительно)большие функции, которые вызываются редко. Вроде обработки ошибок. Или flush буфера, когда он переполнился. Код становится меньше, лучше влезает в кеш и страницы, вообще приятно видеть чистый asm код.
Правильно работающая программа — просто частный случай Undefined Behavior
Re: inline or not inline?
От: gear nuke  
Дата: 07.10.05 14:51
Оценка:
Здравствуйте, Awaken, Вы писали:

A>Саттер в своей последней книжке пишет о вредности (точнее бесполезности) ключевых слов auto, register


Для MSVC\ICC эти ключевые слова не имеют эффекта.

A> и inline

A>мол современный компилятор сам знает что в каком случае надо инлайнить, в зависимости от контекста вызова

MSVC 7.1 это не очень хорошо знает. Если сделать опцию /Os, вообще забывает начисто (из-за того, что не инлайнятся элементарные методы, размер exe запросто получается больше).

A>что думаете по этому поводу?

A>я раньше ставил inline и даже __forceinline (MS specific)

Последняя штука железно работает (кроме случаев, где инлайн невозможен).

A>но последнее время на MSVC++ 7.1 перестал париться с этим — ставлю глобальную оптимизацию , /LTCG и /Ob2


/Ob2 отключается при /Os. /LTCG — тут сложно сказать, результат варьируется по сравнению с "ручным" подходом. Похоже, в MSVC 7.1 эта фича только начала развиваться .

Если размеры не слишком волнуют — ICC рулит. Он вообще всё подряд функции за милую душу инлайнит .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[2]: inline or not inline?
От: 0xDEADBEEF Ниоткуда  
Дата: 07.10.05 16:51
Оценка:
Здравствуйте, Erop, Вы писали:

E>
E>//  MyFile.cpp
E>inline void doSmth( my_struct& )
E>{
E>    //  тут что-то такое делают
E>}
E>


E>
E>//  MyFileExt.cpp
E>inline void doSmth( my_struct& )
E>{
E>    //  тут что-то такое делают немного другое
E>}
E>

Налицо грубейшее нарушение One Definition Rule. Господь тебя покарает...
__________
16.There is no cause so right that one cannot find a fool following it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.