2017-11-01 8 views
1

コマンドラインでの使用を意図したプログラムをCで作成しました。シェルスクリプトに散在していることが多いと思われるプログラムは、manまたはinfoで処理できない特殊なヘルプを持っています。実行ファイルにヘルプをインライン展開すると、読み込み速度と実行速度が低下しますか?

エスケープシーケンスを含むプレーンテキストのヘルプの重さは18.7 KiBです。ゼロ終端文字列としてインライン化された実行可能ファイル(および要求に応じてそれを表示するif句)の重さは39.0 KiBで、19 KiBの重さはありません。

私は実行ファイルにヘルプをインライン展開して、別のファイル名と場所を覚えておいて、その端末に簡単にアクセスできるようにしたいと考えていました(cat)。 (実行ファイルはシェルの検索パスにあるので問題はありません)

しかし、倍増すると読み込み速度が低下することが懸念されます。

OTOH OSがロードされた実行可能ファイルをキャッシュすることを読んだり聞いているようですので、これについてはあまり心配する必要はありません。

もう1つの方法は別のものを実行可能にすることです(重量は28キロビットですが、頻繁に使用されないので心配する必要はありません)。

このような状況のベストプラクティスはありますか?お知らせ下さい。ありがとうございました!

+1

このような詳細は心配しないでください。多少のKb(またはMb)でも目立った変更はありません。むしろあなたが使用しているアルゴリズムに焦点を合わせます。 –

+1

非常に古い/遅いハードウェアを使用していない限り、記述するテキストの量(数KiB)については、ロード/実行速度の差は重要ではありません。私はあなたがUNIXを使っているなら、それが真実であるとは思っていません。このようなハードウェアを使用している場合は、テストを行い、効果がまったく重要かどうかを判断してください。 – Peter

答えて

3

あなたは何も心配する必要はありません。

Linuxは、実行可能ファイルにデマンドページングを使用します。つまり、実行可能ファイルが最初に起動されると、ディスクから何も読み込まれません。ページフォルトが発生したとき(プログラムがまだ存在しないメモリにアクセスしようとしたことを意味します)は、実際にディスクから読み取られたページだけです。

Goで書かれたバイナリの中には、数十メガバイト()のサイズと、起動待ち時間が目立つものがあります。

それぞれのアプローチとベンチマークの開始遅延をお勧めします。

+0

ジョナサン、多くの呼び出しとjmpアドレスは、exeがメモリにロードされる場所に相対的です。これらはデマンドページングでどのように解決されますか? –

+0

Paul、あなたが何を得ているのか分かりません。プログラムが1000でロードされ、libfooが4000でロードされているとしましょう。libfooが実際にRAMに存在していなくても、libfooへの呼び出しを計算できます。ユーザー空間の観点からは、デマンドページングは​​存在しません。それは透明です。 –

+0

非デマンドページングシステムと(小さな)実行可能ファイルがメモリにロードされていると仮定します。実行可能ファイルを実行する前にローダが修正する必要のあるアドレスがありますか?もしそうであれば、デマンド・ページングでページが(仮想)メモリにロードされます - ページング・ローダーはこのページのアドレスを修正しますか?(ディスク上のexeから取得したものですか? –

関連する問題