The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
inline функции, !*! kir, 19-Апр-06, 15:01  [смотреть все]
а возможно ли использовать одну и туже функцию в разных участках когда как inline а в других обычным вызовом?
может есть какоя то директива препроцессору?
  • inline функции, !*! DeadMustdie, 15:11 , 19-Апр-06 (1)
    >а возможно ли использовать одну и туже функцию в разных участках когда
    >как inline а в других обычным вызовом?
    >может есть какоя то директива препроцессору?

    Собственно само ключевое слово inline не обязывает компилятор внедрять код функции в каждую точку вызова - например, при сборке без оптимизации большинство компиляторов и вовсе это никогда не делают. Даже при использовании агрессивных режимов оптимизатора большие inline-функции могут быть обработаны как статические (или, более строго, как weak-символы).

    Специальные директивы для жесткого управления этими вещами мне неизвестны. Если они и существуют в каких-то компиляторах, то являются нестандартными.

    • inline функции, !*! kir, 15:33 , 19-Апр-06 (2)
        ну я тоже не нашел
        но надеялся....
      • inline функции, !*! landor, 21:19 , 20-Апр-06 (3)
        Если компилятор в конкретном месте кода о*ет от сложности кода то может не делать инлиновую подстановку. Вообще есть решение(для GCC, но для извращенцев):
        inline void func()
        {
          //any code
        }

        int main()
        {
            func();//инлайновая подстановка(при оптимизации)
            asm("call _func\n"); //для тех самых
        }

        Увидев таку ботву любой, уважающий себя компилятор, шлепнет в объектный файл и static-вариант.

        Чтоб не шлепать на асме, вот для гурманов исходного кода:
        #define STATIC_CALL(FUNCTION) \
            asm("call _" #FUNCTION "\n");

        Идею подал, для ф-й с параметрами т*сь сами. Если надо подскажу.

        • inline функции, !*! horsh, 00:09 , 25-Апр-06 (4)
          >
          >inline void func()
          >{
          >  //any code
          >}
          >
          >int main()
          >{
          >    func();//инлайновая подстановка(при оптимизации)
          >}
          >

          Проблема в том, что тут инлайна может и не случиться.
          Заставить компилятор инлайнить функцию подчас сложнее
          чем попросить не инлайнить.

          • inline функции, !*! DeadMustdie, 10:37 , 25-Апр-06 (5)
            >Проблема в том, что тут инлайна может и не случиться.
            >Заставить компилятор инлайнить функцию подчас сложнее
            >чем попросить не инлайнить.

            Всё верно, за исключением того, что здесь нет совершенно никакой проблемы :)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру