2

ディレクトリとファイルの両方に対して、構造とstd :: vectorを使用して、メモリ内にCDコンテンツのツリーを作成したいと思います。ファイルを詳細にスキャンすることはしません。ディレクトリまたは通常のファイルである場合にのみ関心があります。

このための最良かつ最速のアプローチは何ですか?再帰スキャンにより、CDユニットのヘッドがドライブ内をジャンプしてファイル/フォルダを探しますか?

CDユニットのヘッドジャンプを減らし、できるだけ速くしたい。ところで:私はUNIXとC /C++を使用しています。

4

1 に答える 1

3

ISO 9660仕様によると:

プライマリボリューム記述子には、隣接するルートディレクトリの場所を説明するルートディレクトリレコードが含まれています。(UNIXの場合と同様に、ディレクトリはオペレーティングシステムの特別な用途のためのファイルとして表示されます)。ディレクトリエントリは、このリージョン内に連続して保存されます。ISO 9660ファイル名の評価は、この場所で開始されます。ルートディレクトリは、ルートに表示される各ディレクトリエントリを含むエクステント、または一連の連続したセクターとして保存されます。

この情報を考えると、ヘッドジャンプをすることはかなり避けられないと思います。この最上位ディレクトリ、たとえばTrack X Sector Yから開始し、スキャンして最初にトラバースするディレクトリを見つけ、ディスク上を下に移動します。したがって、「ダイビング」の方法に関係なく、ツリーにさらに飛び込むたびに頭がジャンプします。トラックに基づいて、次にセクターに基づいてディスクをスキャンする方法があれば、それはメリットをもたらしますが、それを行う方法と、実装する価値があるかどうかはわかりません。

決定は、CDFSのパフォーマンスにはあまり影響しませんが、プロセスのオーバーヘッドに影響します。再帰はスタックへの割り当てのオーバーヘッドを招き、そこにはメモリへの影響があります。しかし、CDFSに関する限り、それはあなたのコントロールでは少ないようです。

ツリートラバーサルには論理的に意味があるので、再帰を使用します。

于 2013-02-22T16:46:50.710 に答える