我用 C 语言创建了一个程序,它编写了一个程序作为其输出。
目标是测试单体程序的性能方面。
第一个测试配置了 10 000 次迭代,结果程序编译并运行。具有 100 000 次迭代的第二个测试是在具有 16 GB RAM (16 GB SWAP) 的 i7 3770 中在 Ubuntu 12.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);
}