The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Должны ли быть видны в inline-функции в профиляторе Gprof ?"
Отправлено xintrea, 12-Ноя-14 17:02 
Вопрос в следующем.

У меня есть функции (точнее, методы, но все происходит в пределах одного класса, причем экземпляр класса один), которые много раз вызываются в цикле. Представляют собой несложные математические вычисления, этакий синтаксический сахар.

Такие функции, да еще и вызываемые в циклах, имеет смысл объявлять инлайновыми. Это необходимо, чтобы не тратилось время на работу со стеком/регистрами при подготовке вызова, на сам вызов функции, на возврат результата.

То есть предполагается, что в машинном коде вызовов этих функций не должно быть, ибо они непосредственно встаиваются в машинный код вместо своего CALL.

При профилировании через gprof я вижу, что эти inline функции показываются в gprof, и gprof показывает число их вызовов.

Вопрос:

Это gprof такой умный, видит работу инлайновых функций, подсчитывает число их "виртуальных" вызов? Или данные функции, несмотря на директиву inline, скомпилены таки в виде обычных функций, и поэтому их видит gprof?

Пример функций:

inline unsigned char RC5Simple::RC5_GetByteFromWord(RC5_TWORD w, int n)
{
unsigned char b=0;

switch (n) {                                                                                  
   case 0:
       b=(w & 0x000000FF);
       break;
   case 1:
       b=(w & 0x0000FF00) >> 8;
       break;
   case 2:
       b=(w & 0x00FF0000) >> 16;
       break;
   case 3:
       b=(w & 0xFF000000) >> 24;
}

// RC5_LOG(( "GetByteFromWord(%.8X, %d)=%.2X\n", w, n, b ));

return b;
}    


inline RC5_TWORD RC5Simple::RC5_GetWordFromByte(unsigned char b0,
                                                unsigned char b1,
                                                unsigned char b2,
                                                unsigned char b3)
{
return b0+
        (b1 << 8)+
        (b2 << 16)+
        (b3 << 24);
}

А вот как они выглядят в профилировщике:

  0.00      0.73     0.00  4289320     0.00     0.00  RC5Simple::RC5_GetByteFromWord(unsigned long, int)
  0.00      0.73     0.00  1072330     0.00     0.00  RC5Simple::RC5_GetWordFromByte(unsigned char, unsigned char, unsigned char, unsigned char)
...
                0.00    0.00 4289320/4289320     RC5Simple::RC5_GetByteFromWord(unsigned long, int) [423]
                0.00    0.00 1072330/1072330     RC5Simple::RC5_GetWordFromByte(unsigned char, unsigned char, unsigned char, unsigned char) [424]

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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