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 にキャッシュされ、解析とコンパイルが行われ、ディスク IO バウンドではなく CPU バウンドになる可能性があります。

于 2009-06-26T12:26:26.537 に答える
1

異なる Unix バージョンで実行できる方法は他にありません。別のプロセスを実行するには、fork-exec を使用する必要があります。まさにそのために作成されたものです。

于 2009-06-26T12:26:24.183 に答える
0

呼び出すことができる関数は他にもありますが ( std::system1 つ)、それらは通常、 および として実装されforkますexec

于 2009-06-26T17:37:14.700 に答える