0

以下代码段在第一次运行时花费更多时间(5 秒),而在连续运行时花费更少时间(250 毫秒)。有没有更好的方法来执行 gcc。

int pid,status;
char * argv[] = {"gcc","program.c",NULL};
if(!(pid=fork())){
    execvp("gcc",argv);
}
while(pid!=wait(&status)){
    //do nothing
}
4

3 回答 3

3

嗯,我不这么认为。第一次使用 5 秒可能是从磁盘读取所有内容到内存的时间。编译器本身,要编译的源,要包含的头文件,要链接的库等。它分散在整个磁盘上,因此磁盘头必须寻找很多。那很慢。

之后,您将所有数据缓存在 RAM 中,它只是解析和编译,可能成为 CPU 限制而不是磁盘 IO 限制。

于 2009-06-26T12:26:26.537 回答
1

没有其他方法可以在不同的 Unix 版本上运行。要运行一个单独的进程,您必须使用 fork-exec - 这正是它们的用途。

于 2009-06-26T12:26:24.183 回答
0

您可以调用其他函数(std::system作为一个函数),但它们通常最终被实现为forkand exec

于 2009-06-26T17:37:14.700 回答