Pure/const-Funktionsattribute in verschiedenen CompilernC++

Programme in C++. Entwicklerforum
Anonymous
 Pure/const-Funktionsattribute in verschiedenen Compilern

Post by Anonymous »

pure ist ein Funktionsattribut, das besagt, dass eine Funktion keinen globalen Speicher verändert.

const ist ein Funktionsattribut, das besagt, dass eine Funktion keinen globalen Speicher liest/ändert.

Anhand dieser Informationen kann der Compiler einige zusätzliche Optimierungen durchführen.

Beispiel für GCC:

Code: Select all

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)); }
In diesem Beispiel könnte der Compiler die Funktion calculate wie folgt optimieren:

Code: Select all

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;
}
Oder wenn Ihr Compiler schlau genug ist (und nicht so streng in Bezug auf Floats):

Code: Select all

float calculate(float x, unsigned int C) { return C ? sigmoid(x) * C : 0.0f; }
Wie kann ich eine Funktion auf diese Weise für die verschiedenen Compiler markieren, z. B. GCC, Clang, ICC, MSVC oder andere?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post