Windows で QtCreator を使用していますが、コンパイラで出力を最適化する方法を知りたいです。
私の理解では、MinGW は GCC のポートです。したがって、 -O2などの引数を使用できるはずです。ただし、「プロジェクト」バーに表示されるのは次のとおりです。
- qmake のビルド手順 (おそらくここにはありません。qmake は .pro ファイル / MOC / Qt に関するものです ...)
- mingw32-make のビルド手順 (おそらく)
- きれいなステップ(おそらくそうではない)
そこで、「引数の作成」ボックスに -O2 を追加しようとしましたが、残念ながら「無効なオプション --O」というエラーが表示されます。
興味のある人のために、私はそれを読んだので、アッカーマン関数の実装を作ろうとしていました:
アッカーマン関数は、非常に深い再帰の観点から定義されているため、再帰を最適化するコンパイラーの能力のベンチマークとして使用できます。
コード(実際にはQtを使用していません):
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <ctime>
using namespace std;
int nbRecursion;
int nbRecursions9;
int Ackermann(int m, int n){
nbRecursion++;
if(nbRecursion % 1000000 == 0){
qDebug() << nbRecursions9 << nbRecursion;
}
if(nbRecursion == 1000000000){
nbRecursion = 0;
nbRecursions9++;
}
if(m==0){
return n+1;
}
if(m>0 && n>0){
return Ackermann(m-1,Ackermann(m, n-1));
}
if(m>0 && n==0){
return Ackermann(m-1,1);
}
qDebug() << "Bug at " << m << ", " << n;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
nbRecursion = 0;
nbRecursions9 = 0;
int m = 3;
int n = 13;
clock_t begin = clock();
Ackermann(m,n);
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
qDebug() << "There are " << CLOCKS_PER_SEC << " CLOCKS_PER_SEC";
qDebug() << "There were " << nbRecursions9 << nbRecursion << " recursions in " << elapsed_secs << " seconds";
double timeX = 1000000000.0*((elapsed_secs)/(double)nbRecursion);
if(nbRecursions9>0){
timeX += elapsed_secs/(double)nbRecursions9;
}
qDebug() << "Time for a function call : " << timeX << " nanoseconds";
return a.exec();
}