Russian Qt Forum

Программирование => С/C++ => Тема начата: blood_shadow от Апрель 28, 2011, 16:20



Название: Встроить ф-цию
Отправлено: blood_shadow от Апрель 28, 2011, 16:20
Добрый день,
Например есть кусок кода:
Код
C++ (Qt)
int j = 0;
while (j < 10)
{
   if (sslSocket.waitForReadyRead(1000))
       break;
   ++j;
 
   if (stopped)
       break;
}
 

его надо пихать во многие места, но как-то не хочется тратиться на вызовы ф-ций
еще и с циклом внутри, если просто подставить тут без макросов никак?
инлайновой ее никак нельзя сделать(чтобы не было вызова ф-ции)?


Название: Re: Встроить ф-цию
Отправлено: Пантер от Апрель 28, 2011, 16:23
Положись на компилятор и не трать время на такие мелочи.


Название: Re: Встроить ф-цию
Отправлено: Fat-Zer от Апрель 28, 2011, 16:35
Положись на компилятор и не трать время на такие мелочи.
+1
inline нынче ни на что не влияет... на -O0 компилятор ничего не встраивает, а на -O2 он уже сам решат, что оптимизировать, а что нет. (ещё интересно посмотреть, что на -O1 будет получаться, но чтобы его использовали на практике я не видел...) Так что смело делайте отдельной функцией...


Название: Re: Встроить ф-цию
Отправлено: Пантер от Апрель 28, 2011, 16:38
Как-то попадалось __forceinline, можешь погуглить на эту тему, но я бы на твоем месте не заморачивался. Если что, позднее можно будет соптимизировать.


Название: Re: Встроить ф-цию
Отправлено: blood_shadow от Апрель 28, 2011, 16:50
Как-то попадалось __forceinline, можешь погуглить на эту тему, но я бы на твоем месте не заморачивался. Если что, позднее можно будет соптимизировать.
кстати, а насчет оптимизации, чем обычно пользуются профайлерами или еще чем?


Название: Re: Встроить ф-цию
Отправлено: Пантер от Апрель 28, 2011, 16:51
Можно valgrind, можно самописные тесты. По любому есть куча способов.


Название: Re: Встроить ф-цию
Отправлено: Igors от Апрель 28, 2011, 16:54
Например есть кусок кода:
Код
C++ (Qt)
int j = 0;
while (j < 10)
{
   if (sslSocket.waitForReadyRead(1000))
       break;
   ++j;
 
   if (stopped)
       break;
}
 

его надо пихать во многие места, но как-то не хочется тратиться на вызовы ф-ций
еще и с циклом внутри, если просто подставить тут без макросов никак?
инлайновой ее никак нельзя сделать(чтобы не было вызова ф-ции)?
Это выглядит скорее "метод/класс" чем просто ф-ция. Многовато всего вылезает (j, 10, 1000, stopped). Если не хочется наследоваться от sslSocket, можно напр так
Код
C++ (Qt)
class MySocketReader {
public:
 MySocketReader( int timeStep, int numStepMax, QIODevice * device, const bool * stopFlag );
 int Read( void );
 
 enum {
  result_ok = 0,
  result_timeout = -1,
  result_stop = -2,
 };
 ...
};
 
Ну а вопрос об inline просто не стоит т.к. задействовано waitForReadyRead