以下代码段在第一次运行时花费更多时间(5 秒),而在连续运行时花费更少时间(250 毫秒)。有没有更好的方法来执行 gcc。
int pid,status;
char * argv[] = {"gcc","program.c",NULL};
if(!(pid=fork())){
execvp("gcc",argv);
}
while(pid!=wait(&status)){
//do nothing
}
嗯,我不这么认为。第一次使用 5 秒可能是从磁盘读取所有内容到内存的时间。编译器本身,要编译的源,要包含的头文件,要链接的库等。它分散在整个磁盘上,因此磁盘头必须寻找很多。那很慢。
之后,您将所有数据缓存在 RAM 中,它只是解析和编译,可能成为 CPU 限制而不是磁盘 IO 限制。
没有其他方法可以在不同的 Unix 版本上运行。要运行一个单独的进程,您必须使用 fork-exec - 这正是它们的用途。
您可以调用其他函数(std::system
作为一个函数),但它们通常最终被实现为fork
and exec
。