Как отключить оптимизацию??

Тема в разделе "LANGS.C", создана пользователем int2e, 15 янв 2009.

  1. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    САБЖ
    как сделать так, чтобы не было джампов на функцию, а сразу шло ее тело

    Сейчас к примеру вот такой код fa = &MyFunc; возвращает указатель на джамп, который в свою очередь передает управление на тело функции.

    Можно сделать так, чтобы было сразу тело? без джампов?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    int2e
    Отключить? MyFunc(...)? Не понятен контекст проблемы.
    Если передаёшь указатель на функцию в другую функцию, то могут помочь объекты - функции.

    Код (Text):
    1. #include <iostream>
    2.  
    3. class Func1
    4. {
    5. public:
    6.     int operator ()(int a, int b) const
    7.     {
    8.         return a + b;
    9.     }
    10. };
    11.  
    12. class Func2
    13. {
    14. public:
    15.     int operator ()(int a, int b) const
    16.     {
    17.         return a - b;
    18.     }
    19. };
    20.  
    21. template <typename T>
    22. void foo(const T& f)
    23. {
    24.     std::cout<<f(2, 2)<<std::endl;
    25. }
    26.  
    27. int main (int argc, char* argv[])
    28. {
    29.     foo(Func1());
    30.     foo(Func2());
    31. }
    Шаблон foo будет специализироваться конкретным типом - объект - функция, а значит внутри foo будет доступна конкретная реализация этого объекта - функции, а следовательно компилятору будет легче сделать inline.
     
  3. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    int2e
    это не оптимизация.
    если MyFunc описана в другом объектнике, то жмп влепит линкер. Чтоб получить тело ф-и в том же модуле создайте экспортируемую переменную которой присвойте адрес вашей функи и впоследствии из нее и читайте.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _basmp_
    Я думаю что под телом, он подразумевает инлайн, а для инлайна нужна реализация.

    Что-то я не понял, о чём это.
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _basmp_
    Дошло. Но только не понимаю откуда там взяться лишнему jmp? В дебаге ещё понять можно. Но в релизе этого говна быть не должно.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Incremintal Linking
     
  7. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    n0name
    Во! работает! Спасибо!