プログラムを出力として書き込むCでプログラムを作成しました。
目的は、モノリシックプログラムのパフォーマンスの側面をテストすることです。
最初のテストは10000回の反復で構成され、結果プログラムはコンパイルされて実行されました。100 000回の反復による2番目のテストは、16 GB RAM(16 GB SWAP)を備えたi73770のUbuntu12.04 x86_64でコンパイル(現在まで3030分)です。
解析の複雑さはO(n ** 2)からO(n ** 3)までですが、これには時間がかかりすぎます。最悪のシナリオでは、コンパイルのタイミングが1000倍になります。
メモリの35.2%を消費していますが、それでも増加しています。
私の質問は:
GCCには、モジュールごとの変数の数またはモジュールサイズに制限がありますか?
これはバグですか?
元のプログラムジェネレータは次のとおりです。
#include <stdio.h>
#define MAX_INTERACTION 100000
int main(int argc, char **argv)
{
FILE * fp;
fp = fopen("source.c","w");
fprintf(fp,"#include <stdio.h> \n \n \n");
fprintf(fp,"int main(int argc, char **argv) \n");
fprintf(fp,"{ \n");
// local variables and exchange variables
for (int i=0; i< MAX_INTERACTION ; ++i)
{
// passed variable, return label , local variable
fprintf(fp," int pv%d , rl%d, loc%d ; \n",i,i,i);
}
fprintf(fp," int pvd =0 ;\n \n \n");
//code blocks
for (int i=0; i< MAX_INTERACTION ; ++i)
{
fprintf(fp," block%d : \n",i);
fprintf(fp," loc%d = pv%d +1 ; \n",i,i);
fprintf(fp," goto rl%d; \n",i);
}
//call blocks
for (int i=1; i< MAX_INTERACTION +1; ++i)
{
fprintf(fp," pvd = pv%d ;\n",(i-1));
fprintf(fp," goto block%d; \n",(i-1));
fprintf(fp," rl%d: \n",(i-1));
}
fprintf (fp,"printf( \"Concluido \\n \"); \n");
fprintf(fp,"}\n");
fclose(fp);
}