tributos de função pura / const em diferentes compilador
pur é um atributo de função que indica que uma função não modifica nenhuma memória globa
const é um atributo de função que indica que uma função não lê / modifica nenhuma memória globa
Dada essa informação, o compilador pode fazer algumas otimizações adicionai
Exemplo para o 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)); }
Nesse exemplo, o compilador poderia otimizar a funçãocalcula para
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;
}
Ou se o seu compilador for inteligente o suficiente (e não tão rigoroso quanto às flutuações):
float calculate(float x, unsigned int C) { return C ? sigmoid(x) * C : 0.0f; }
Como posso marcar uma função dessa maneira para os diferentes compiladores, ou seja, GCC, Clang, ICC, MSVC ou outro