реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Много мелких функций или одна большая?
GYUR22
сообщение Feb 14 2011, 12:28
Сообщение #16


Участник
*

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



еще раз для тупого...
чем лучше static inline
по сравнению с просто inline?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 14 2011, 12:51
Сообщение #17


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(GYUR22 @ Feb 14 2011, 15:28) *
чем лучше static inline
по сравнению с просто inline?

Есть поверье, что оптимизируется лучше, т.к. все связи у компилятора на виду и ему не надо подразумевать возможности внешних вызовов


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
GYUR22
сообщение Feb 14 2011, 13:56
Сообщение #18


Участник
*

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



меня интересует встроится ли код или нет если оставить просто inline ( все эти функции я вывел в отдельный файл и обозвал с inline)

ps про поверье это пять...

Сообщение отредактировал GYUR22 - Feb 14 2011, 13:57
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 14 2011, 14:09
Сообщение #19


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(MrYuran @ Feb 14 2011, 15:51) *
Есть поверье, что оптимизируется лучше, т.к. все связи у компилятора на виду и ему не надо подразумевать возможности внешних вызовов

Это надежда, а не поверье. Пока что с оптимизацией как раз "болезни роста"
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 14 2011, 15:47
Сообщение #20


неотягощённый злом
******

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



Цитата(GYUR22 @ Feb 14 2011, 16:56) *
меня интересует встроится ли код или нет если оставить просто inline
Встроится или нет.
Я же Вам написал что нужно сделать чтобы всегда встраивалось.
Вы что-то не смогли осознать?

Цитата(_Pasha @ Feb 14 2011, 17:09) *
Пока что с оптимизацией как раз "болезни роста"
Думается что это бесконечная болезнь, во всяком случае хочется в это верить.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 14 2011, 17:19
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(demiurg_spb @ Feb 14 2011, 18:47) *
Я же Вам написал что нужно сделать чтобы всегда встраивалось.


В общем случае нет гарантированного способа "заставить" компилятор встроить inline функцию. Может встроить, а может - нет. Все пляски с прагмами и атрибутами повышают вероятность встраивания.
Go to the top of the page
 
+Quote Post
GYUR22
сообщение Feb 14 2011, 17:27
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 14 2011, 20:02
Сообщение #23


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(GYUR22 @ Feb 14 2011, 21:27) *
выдержка из википедии (может конечно врут...) но про static ни слова....
про статик более менее понятно стало из другой статья .....что это локальные функции
но честно говоря все очень запутано.....

А что Вам мешает объявить функцию в разных вариантах и самому понять, что почём? И не мучать людей, не являющихся преподами.
Go to the top of the page
 
+Quote Post
GYUR22
сообщение Feb 14 2011, 20:22
Сообщение #24


Участник
*

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



честно говоря не собирался никого мучить, даже тема была другая
просто возникший в процессе вопрос нов и непонятен - и как показало общественное мнение результат негарантирован.

имхо:
Результат в моем случае проверить сложно т.к. размер кода - будет один и тотже -функции используются по разу
а скорость отклика - уарта мне точно померять пока не представляется возможным - точность +/- 1 ms уже не устроит

а вот результат по разбиению исполнения массива данных - был виден и дал выигрыш как раз ~1ms - спасибо за наводку

Всем спасибо дальше как говориться куда кривая выведет sm.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 14 2011, 20:54
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(GYUR22 @ Feb 14 2011, 23:22) *
Всем спасибо дальше как говориться куда кривая выведет



Всегда есть варианты решения задачи. Самое главное найти в своей программе "буталочное горлышко", тогда его можно расширить десятком разных способов.

Если вы удовлетворены своими inline изысками - отлично. Но вы, наверное, поняли, что это вариант слегка от лукавого. Я к тому, что вы в данном случае не на 100% контролируете ситуацию. А это не есть хорошо.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Feb 15 2011, 04:56
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата
чем лучше static inline
по сравнению с просто inline?


Просто инлайн ф-цию компилятор может вставить и как вызов, если сочтет это более подходящим, а статик инлайн он всегда вставляет как надо. Я это где-то прочитал в документации, не помню где.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 15 2011, 17:43
Сообщение #27


неотягощённый злом
******

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



Цитата(sergeeff @ Feb 14 2011, 20:19) *
В общем случае нет гарантированного способа "заставить" компилятор встроить inline функцию. Может встроить, а может - нет. Все пляски с прагмами и атрибутами повышают вероятность встраивания.
С чего такой пессимизм?
Насколько я знаю если в gcc дал атрибут, так он отрабатывает по полной.
Не встречалось в моей практике исключений (я сейчас про gcc только говорю).
Приведите примерчик кода с листингом для убедительности.

Если разить вашу теорию, то и данные предназначенные для помещения в секции EEPROM (это при помощи атрибутов в gcc происходит) ИНОГДА могут оказаться в другой секции.
Это абсурд!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 15 2011, 18:26
Сообщение #28


Профессионал
*****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Petka
сообщение Feb 15 2011, 18:48
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(sergeeff @ Feb 15 2011, 21:26) *
Поспокойнее сэр!

Это не моя теория.
...

У микрософта сносная документация, но не лучшие компиляторы.
Если по теме, то надо приводить выдержки из "С99".
В gcc насколько помню есть атрибут с говорящим названием always_inline.
На моей практике при "-O3" даже inline в большинстве случаев указывать не надо, само автоматически встроится.

Go to the top of the page
 
+Quote Post
sergeeff
сообщение Feb 15 2011, 20:27
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Petka @ Feb 15 2011, 21:48) *
У микрософта сносная документация, но не лучшие компиляторы.


Да ладно уж! А на чем написано большинство программ под windows всех мастей? По крайней мере их компиляторы достаточно прогнозируемо себя ведут.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 10:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01617 секунд с 7
ELECTRONIX ©2004-2016