1

posix システムで標準ライブラリを使用する C プログラムで、潜在的に非常に大きな文字列を一時的に保存する適切な方法を探しています。文字列は、C 関数の行ごとの出力の集大成です。この関数の最後の呼び出しの後、データをさらに処理 (出力) したいと思います。大量のメモリを割り当てることと一時ファイルを作成することの間に単純な妥協点はありますか? たとえば、パイプに書き込み、データが必要になったらこのパイプから再度読み取ることを想像できます。しかし、この場合、データが内部でどのように扱われるのか、一時ファイルよりも優先されるのかどうかはわかりません。

4

2 に答える 2

1

それは主に、データで何をする必要があるかによって異なります。ランダムにアクセスする必要がある場合 (たとえば、並べ替える必要がある場合)、大量のメモリを使用する可能性があるにもかかわらず、ファイルがすべてメモリ内にあれば、はるかに簡単になることがあります。

特に、データに順次アクセスして処理できる場合、データが大きいと予想される場合は、通常、一時ファイルをお勧めします。

メインスレッドがデータを書き込んでいる間にパイプからデータを読み取る別のスレッドを作成しない限り、パイプは役に立ちません。そうしないと、パイプのバッファーとブロックがすぐにいっぱいになります (実際にはデッドロック)。

于 2012-05-14T16:34:25.210 に答える
0

メモリに保持するか、ディスクに書き込むかを決定できます(コメントによると、ケースごとに決定する必要があります)。データが特定のしきい値を超えて増加していることに気付いた場合は、ディスクに書き込み、残りのデータを書き込む方法を切り替えます。

パイプは、ストレージ サイズが非常に小さいプロセス間通信方法であるため、良い考えではありません (Linux 2.6 以降では約 64kiB、2.4 では AFAIR であり、4 kiB 程度)。

于 2012-05-14T16:42:47.623 に答える