атрибуты функции pure / const в разных компиляторах
Чистый - это атрибут функции, который говорит, что функция не изменяет никакую глобальную память.
Const - это атрибут функции, который говорит, что функция не читает и не изменяет глобальную память.
Получив эту информацию, компилятор может выполнить некоторые дополнительные оптимизации.
Пример для GCC:
float sigmoid(float x) __attribute__ ((const));
float calculate(float x, unsigned int C) {
float sum = 0;
for(unsigned int i = 0; i < C; ++i)
sum += sigmoid(x);
return sum;
}
float sigmoid(float x) { return 1.0f / (1.0f - exp(-x)); }
В этом примере компилятор может оптимизировать функцию Высчитывает to:
float calculate(float x, unsigned int C) {
float sum = 0;
float temp = C ? sigmoid(x) : 0.0f;
for(unsigned int i = 0; i < C; ++i)
sum += temp;
return sum;
}
Или если ваш компилятор достаточно умен (и не так уж строг в отношении чисел с плавающей точкой):
float calculate(float x, unsigned int C) { return C ? sigmoid(x) * C : 0.0f; }
Как я могу пометить функцию таким образом для различных компиляторов, то есть GCC, Clang, ICC, MSVC или других?