Ключевое слово inline
в основном бесполезно. Это только предложение. Компилятор может игнорировать его и отказываться встроить такую функцию, а также может включать функцию, объявленную без ключевого слова inline
.
Если вы действительно заинтересованы в тестировании служебных вызовов вызова функции, вы должны проверить результирующую сборку, чтобы убедиться, что функция действительно была (или не была) встроенной. Я не очень хорошо знаком с VC ++, но у него может быть специфичный для компилятора метод принудительного или запрещающего встраивания функции (однако стандартное ключевое слово C ++ inline
не будет им).
Итак, я полагаю, что ответ на более широкий контекст вашего исследования: не беспокойтесь о явном включении . Современные компиляторы знают, когда вставлять, а когда нет, и обычно принимают лучшие решения, чем даже очень опытные программисты. Вот почему ключевое слово inline
часто полностью игнорируется. Вам не следует беспокоиться о явном принудительном или запрещении встраивания функции, если только у вас нет особой необходимости сделать это (в результате профилирования выполнения вашей программы и обнаружения, что узкое место может быть устранено с помощью встроенного компилятора для некоторых причина не сделана).
Re: сборка:
; 30 : const unsigned int maxUINT = -1;
; 31 : clock_t start = clock();
mov esi, DWORD PTR __imp__clock
push edi
call esi
mov edi, eax
; 32 :
; 33 : //============================ NON-INLINE TEST ===============================//
; 34 : for(unsigned int i = 0; i < maxUINT; ++i)
; 35 : blank(1.1,2.2,3.3);
; 36 :
; 37 : clock_t end = clock();
call esi
Это сборка:
- Чтение часов
- Сохранение значения часов
- Чтение часов снова
Заметьте, чего не хватает: вызывая вашу функцию много раз
Компилятор заметил, что вы ничего не делаете с результатом функции и что функция не имеет побочных эффектов, поэтому она вообще не вызывается .
Вы, вероятно, можете заставить его вызывать функцию в любом случае, компилируя с отключенными оптимизациями (в режиме отладки).