Russian Qt Forum

Программирование => С/C++ => Тема начата: IzoLda от Январь 23, 2012, 09:57



Название: u_int32 и inline
Отправлено: IzoLda от Январь 23, 2012, 09:57
объясните,пожалуйста что переменная u_int32 и в каких целях применяется ключевое слово inline??


Название: Re: u_int32 и inline
Отправлено: Пантер от Январь 23, 2012, 10:11
u_int32 - 32-битное целое беззнаковое число.
inline говорит компилятору, что функцию нужно встроить. То есть не вызывать ее, а поместить ее код в место вызова. Можно не использовать, так как компилятор игнорирует это.


Название: Re: u_int32 и inline
Отправлено: Igors от Январь 23, 2012, 10:21
Наверное лучше сказать что inline говорит компилятору что ф-цию/метод желательно встроить, а встроит он или нет - его личное дело. Если опыта маловато - можно спокойно жить без inline


Название: Re: u_int32 и inline
Отправлено: IzoLda от Январь 23, 2012, 10:31
а нужно ли подключать дополнительный заголовочный файл для переменной u_int32 ?


Название: Re: u_int32 и inline
Отправлено: Disa от Январь 23, 2012, 11:03
to Igors:
Мне из личного любопытства, тк опыт на плюсах есть, но не могу сказать что большой. У вас было когда вы в пром. коде что-то отпимизировали inlin'ом и это помогло?


Название: Re: u_int32 и inline
Отправлено: mutineer от Январь 23, 2012, 11:54
to Igors:
Мне из личного любопытства, тк опыт на плюсах есть, но не могу сказать что большой. У вас было когда вы в пром. коде что-то отпимизировали inlin'ом и это помогло?

Насколько я знаю из книг и советов коллег сейчас вручную писать inline почти бесполезно - компилятор лучше знает когда выгоднее функцию встроить, а когда нет


Название: Re: u_int32 и inline
Отправлено: IzoLda от Январь 23, 2012, 12:08
спасибо всем!)


Название: Re: u_int32 и inline
Отправлено: Disa от Январь 23, 2012, 12:44
to mutineer:
Я по этому и спросил. :)  Саттер писал, что inline почти всегда эквивалентен пробелу, но тем не менее в конце говорит:

Цитировать
"Избегайте использования ключевого слова  inline или других попыток оптимизации до тех пор, пока на их необходимость не укажут измерения производительности программы"


Название: Re: u_int32 и inline
Отправлено: Igors от Январь 23, 2012, 14:42
to Igors:
Мне из личного любопытства, тк опыт на плюсах есть, но не могу сказать что большой. У вас было когда вы в пром. коде что-то отпимизировали inlin'ом и это помогло?
Когда-то было, правда обычно не более 5-10% :) Да, сейчас что-то ускорить inlin'ом трудно, если вообще возможно. Но на мой взгляд inline хорош тем что сразу видно кто это: капитальная ф-ция/метод или так себе, аксессор и.т.п.


Название: Re: u_int32 и inline
Отправлено: Пантер от Январь 23, 2012, 14:53
Есть еще всякие force_inline.


Название: Re: u_int32 и inline
Отправлено: gogi от Январь 24, 2012, 08:01
Насколько я знаю из книг и советов коллег сейчас вручную писать inline почти бесполезно - компилятор лучше знает когда выгоднее функцию встроить, а когда нет

Некоторые функции не могут быть заинлайнены по ряду причин (например из-за forward declaration). В gcc можно включить соответствующий варнинг и это станет видно. После этого можно устранить эти причины и компилятор дальше уже сам справится. Так что смысл от inline'а всё же есть.


Название: Re: u_int32 и inline
Отправлено: mutineer от Январь 24, 2012, 11:10
После этого можно устранить эти причины и компилятор дальше уже сам справится

То есть гарантированно заинлайнит функцию?


Название: Re: u_int32 и inline
Отправлено: gogi от Январь 24, 2012, 12:30
То есть гарантированно заинлайнит функцию?

Не факт, он будет смотреть по обстоятельствам. Но это всё же лучше, чем гарантированное незаинлайнивание.


Название: Re: u_int32 и inline
Отправлено: mutineer от Январь 24, 2012, 12:36
То есть гарантированно заинлайнит функцию?

Не факт, он будет смотреть по обстоятельствам. Но это всё же лучше, чем гарантированное незаинлайнивание.

А разве отстутсвие inline гарантирует незаинлайнивание? Мне кажется что с включенными оптимизациями компилер может заинлайнить любую функцию по своему усмотрению


Название: Re: u_int32 и inline
Отправлено: stima от Январь 27, 2012, 12:13
Код:
class MyClass {
    private:
        int number;
   
    public:
        int getNumber() { return number; } //это инлайн функция, просто опущено ключевое слово.
};

Код:
template<class T>
inline T max(const T& a, const T& b) { return a > b ? a : b; }  // это адекватное исользование инлайн


Название: Re: u_int32 и inline
Отправлено: Disa от Январь 31, 2012, 09:16
Что значит адекватное использование inline?
Как узнать, что она окажется встроенной или нет, если его (inline) писать / не писать?
В любом случае, как я понимаю нужно смотреть спецификацию компилятора.   


Название: Re: u_int32 и inline
Отправлено: LisandreL от Март 16, 2012, 18:48
Как узнать, что она окажется встроенной или нет, если его (inline) писать / не писать?
Встречный вопрос: а в сущности зачем вам это знать?


Название: Re: u_int32 и inline
Отправлено: Disa от Март 19, 2012, 10:27
Не ясен суть комментария stima про адекватное использование - только как внешняя подсказка типа const? Я немного сомниваюсь, что сейчас много кто способен лучше компилятора понять какую функцию встраивать, а какую нет.


Название: Re: u_int32 и inline
Отправлено: Blackwanderer от Март 19, 2012, 17:03
Как узнать, что она окажется встроенной или нет, если его (inline) писать / не писать?
В любом случае, как я понимаю нужно смотреть спецификацию компилятора.   
Боюсь, даже спецификации не помогут, только исходный код. Более-менне однозначно описано только то, что гарантированно заинлайнить нельзя. Все остальное - исходя из контекста.