|
|
  |
Много мелких функций или одна большая? |
|
|
|
Feb 14 2011, 12:28
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 16-02-09
Пользователь №: 44 931

|
еще раз для тупого... чем лучше static inline по сравнению с просто inline?
|
|
|
|
|
Feb 14 2011, 13:56
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 16-02-09
Пользователь №: 44 931

|
меня интересует встроится ли код или нет если оставить просто inline ( все эти функции я вывел в отдельный файл и обозвал с inline)
ps про поверье это пять...
Сообщение отредактировал GYUR22 - Feb 14 2011, 13:57
|
|
|
|
|
Feb 14 2011, 15:47
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(GYUR22 @ Feb 14 2011, 16:56)  меня интересует встроится ли код или нет если оставить просто inline Встроится или нет. Я же Вам написал что нужно сделать чтобы всегда встраивалось. Вы что-то не смогли осознать? Цитата(_Pasha @ Feb 14 2011, 17:09)  Пока что с оптимизацией как раз "болезни роста" Думается что это бесконечная болезнь, во всяком случае хочется в это верить.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 14 2011, 17:27
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 16-02-09
Пользователь №: 44 931

|
C++, C99, and GNU C each have support for inline functions. Different compilers vary in how complex a function they can manage to inline. Mainstream C++ compilers like Microsoft Visual C++ and GCC support an option that lets the compilers automatically inline any suitable function, even those not marked as inline functions.
выдержка из википедии (может конечно врут...) но про static ни слова.... про статик более менее понятно стало из другой статья .....что это локальные функции но честно говоря все очень запутано.....
Сообщение отредактировал GYUR22 - Feb 14 2011, 19:33
|
|
|
|
|
Feb 14 2011, 20:22
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 16-02-09
Пользователь №: 44 931

|
честно говоря не собирался никого мучить, даже тема была другая просто возникший в процессе вопрос нов и непонятен - и как показало общественное мнение результат негарантирован. имхо: Результат в моем случае проверить сложно т.к. размер кода - будет один и тотже -функции используются по разу а скорость отклика - уарта мне точно померять пока не представляется возможным - точность +/- 1 ms уже не устроит а вот результат по разбиению исполнения массива данных - был виден и дал выигрыш как раз ~1ms - спасибо за наводку Всем спасибо дальше как говориться куда кривая выведет
|
|
|
|
|
Feb 15 2011, 04:56
|
Местный
  
Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940

|
Цитата чем лучше static inline по сравнению с просто inline? Просто инлайн ф-цию компилятор может вставить и как вызов, если сочтет это более подходящим, а статик инлайн он всегда вставляет как надо. Я это где-то прочитал в документации, не помню где.
|
|
|
|
|
Feb 15 2011, 17:43
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(sergeeff @ Feb 14 2011, 20:19)  В общем случае нет гарантированного способа "заставить" компилятор встроить inline функцию. Может встроить, а может - нет. Все пляски с прагмами и атрибутами повышают вероятность встраивания. С чего такой пессимизм? Насколько я знаю если в gcc дал атрибут, так он отрабатывает по полной. Не встречалось в моей практике исключений (я сейчас про gcc только говорю). Приведите примерчик кода с листингом для убедительности. Если разить вашу теорию, то и данные предназначенные для помещения в секции EEPROM (это при помощи атрибутов в gcc происходит) ИНОГДА могут оказаться в другой секции. Это абсурд!
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 15 2011, 18:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(demiurg_spb @ Feb 15 2011, 20:43)  С чего такой пессимизм? ... Это абсурд! Поспокойнее сэр! Это не моя теория. Читаем, например, http://msdn.microsoft.com/en-us/library/z8...=vs.80%29.aspx:Цитата The insertion (called inline expansion or inlining) occurs only if the compiler's cost/benefit analysis show it to be profitable. Inline expansion alleviates the function-call overhead at the potential cost of larger code size. чуть ниже: Цитата The compiler treats the inline expansion options and keywords as suggestions. There is no guarantee that functions will be inlined. You cannot force the compiler to inline a particular function, even with the __forceinline keyword. When compiling with /clr, the compiler will not inline a function if there are security attributes applied to the function.
|
|
|
|
|
Feb 15 2011, 18:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(sergeeff @ Feb 15 2011, 21:26)  Поспокойнее сэр!
Это не моя теория. ... У микрософта сносная документация, но не лучшие компиляторы. Если по теме, то надо приводить выдержки из "С99". В gcc насколько помню есть атрибут с говорящим названием always_inline. На моей практике при "-O3" даже inline в большинстве случаев указывать не надо, само автоматически встроится.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|