0

この質問はANSICに関するものです。簡単な答えになるはずです...では、これらの方法のどれが最速ですか?それは私の現在のプロジェクトとは実際には何の関係もありませんが、ある日頭に浮かんだばかりで、ウェブ上ですぐに答えがわかりませんでした...

4

4 に答える 4

10

printf何桁も、あらゆる意味で、はるかに好ましいです。これはC標準の一部であるライブラリ関数であり、独自のプログラムに目的の出力を出力させます。system一方、新しい別個のプロセス(同等の永遠を要するもの)を起動しますが、シェルが実際にecho同じことを行うコマンドを提供することを期待する必要があります。

呼び出すよりも悪いことは、それを含む別のプログラムをコンパイルして実行するコンパイラを呼び出すことです。systemechosystemprintf

使用しないでくださいsystem

于 2012-07-31T13:31:43.363 に答える
4

systemコマンドを実行するためのシェルを生成します。これはfork()/exec()、シェルを生成するためのがあり、シェルが別のシェルを呼び出しfork()/exec()て実行することを意味しますecho。言うまでもなく、shellを検索しPATHたりecho、環境変数を渡したりする必要があります。

ひどく、への関数呼び出しよりもひどく遅いprintfsystemこれは、シェルがないか、がないために失敗する可能性があるという事実に加えてechoです。

于 2012-07-31T13:30:45.840 に答える
0

この場合、比較可能なものを比較する方がよいでしょう... system()でprintfのようなものを呼び出すことができ、プロセッサだけが高速性に関与しているわけではありません。

いくつかの特定のケースでは、printfの呼び出しが新しい小さなプロセスの呼び出しよりも遅くなることは不可能ではないと思います(ただし、hdd / memoryに対して奇妙な構成プロセッサを所有していると想定しています)。

同じプロセスで、system_callを使用するのが、何かを書くための最速の方法です...(バッファの問題なしで)。

たとえば、ほとんどのUNIXシステムでは、書き込み呼び出し(単純な文字列を書き込むことだけが必要な場合)が最速の方法です。

于 2012-07-31T13:46:14.710 に答える
0

systemコマンド/プログラムを見つけることができないかもしれません...またはあなたのコードを知っている誰かが彼/彼女のパスに名前をecho付けられた悪意のあるプログラムをインストールする可能性があります。echoしたがって、system桁違いに遅くなるだけでなく、セキュリティ上のリスクもあります。

を使用しなければならない状況に陥った場合は、呼び出しているコマンド(または)を常にsystem完全に修飾する必要があります。/bin/echo/usr/bin/echo

しかし、それを使用する必要はありません。外部プログラムを呼び出して実行できるものはすべて...プログラムから呼び出して同じことを実行できるライブラリ(またはライブラリを構築できるコード)を見つけることができるはずです。そして、それはその方法ではるかに速くそしてより安全になるでしょう。

于 2012-07-31T13:49:42.360 に答える