この質問はANSICに関するものです。簡単な答えになるはずです...では、これらの方法のどれが最速ですか?それは私の現在のプロジェクトとは実際には何の関係もありませんが、ある日頭に浮かんだばかりで、ウェブ上ですぐに答えがわかりませんでした...
4 に答える
printf
何桁も、あらゆる意味で、はるかに好ましいです。これはC標準の一部であるライブラリ関数であり、独自のプログラムに目的の出力を出力させます。system
一方、新しい別個のプロセス(同等の永遠を要するもの)を起動しますが、シェルが実際にecho
同じことを行うコマンドを提供することを期待する必要があります。
呼び出すよりも悪いことは、それを含む別のプログラムをコンパイルして実行するコンパイラを呼び出すことです。system
echo
system
printf
使用しないでくださいsystem
。
system
コマンドを実行するためのシェルを生成します。これはfork()/exec()
、シェルを生成するためのがあり、シェルが別のシェルを呼び出しfork()/exec()
て実行することを意味しますecho
。言うまでもなく、shell
を検索しPATH
たりecho
、環境変数を渡したりする必要があります。
ひどく、への関数呼び出しよりもひどく遅いprintf
。system
これは、シェルがないか、がないために失敗する可能性があるという事実に加えてecho
です。
この場合、比較可能なものを比較する方がよいでしょう... system()でprintfのようなものを呼び出すことができ、プロセッサだけが高速性に関与しているわけではありません。
いくつかの特定のケースでは、printfの呼び出しが新しい小さなプロセスの呼び出しよりも遅くなることは不可能ではないと思います(ただし、hdd / memoryに対して奇妙な構成プロセッサを所有していると想定しています)。
同じプロセスで、system_callを使用するのが、何かを書くための最速の方法です...(バッファの問題なしで)。
たとえば、ほとんどのUNIXシステムでは、書き込み呼び出し(単純な文字列を書き込むことだけが必要な場合)が最速の方法です。
system
コマンド/プログラムを見つけることができないかもしれません...またはあなたのコードを知っている誰かが彼/彼女のパスに名前をecho
付けられた悪意のあるプログラムをインストールする可能性があります。echo
したがって、system
桁違いに遅くなるだけでなく、セキュリティ上のリスクもあります。
を使用しなければならない状況に陥った場合は、呼び出しているコマンド(または)を常にsystem
完全に修飾する必要があります。/bin/echo
/usr/bin/echo
しかし、それを使用する必要はありません。外部プログラムを呼び出して実行できるものはすべて...プログラムから呼び出して同じことを実行できるライブラリ(またはライブラリを構築できるコード)を見つけることができるはずです。そして、それはその方法ではるかに速くそしてより安全になるでしょう。