ファイルを文字列に読み込みたいのですが。私はそれを効率的に行うためのさまざまな方法を探しています。
固定サイズの*charバッファーを使用する
Tonyから、16 kbのバッファーを作成し、そのバッファーを読み取り、読み取るものがなくなるまでバッファーを追加するという回答を受け取りました。私はそれがどのように機能するかを理解していて、それを非常に速く見つけました。私が理解していないのは、その回答のコメントでは、この方法ですべてを2回コピーすると言われているということです。しかし、私が理解しているように、それはディスクからではなく、メモリ内でのみ発生するため、ほとんど気付かれません。バッファからメモリ内の文字列にコピーするのは問題ですか?
istreambuf_iteratorを使用する
私が受け取った他の答えはistreambuf_iteratorを使用しています。コードは美しく最小限に見えますが、非常に低速です。なぜそれが起こるのか分かりません。なぜそれらのイテレータはとても遅いのですか?
memcpy()の使用
この質問に対して、 memcpy()は最速のネイティブメソッドであるため、使用する必要があるというコメントを受け取りました。しかし、文字列とifstreamオブジェクトでmemcpy()を使用するにはどうすればよいですか?ifstreamは独自の読み取り関数で動作するはずではありませんか?memcpy()を使用すると移植性が損なわれるのはなぜですか?VS2010およびGCCと互換性のあるソリューションを探しています。memcpy()がそれらで機能しないのはなぜですか?
+他に可能な効率的な方法はありますか?
10 MB未満の小さなバイナリファイルには、何をお勧めしますか、どのシェルを使用しますか?
(ifstreamを文字列に読み取る方法の違いの比較に興味があるので、この質問を部分的に分割したくありませんでした)