ホームページ >バックエンド開発 >C++ >C 標準ストリームを使用して、事前に割り当てられたバッファに効率的に書き込むにはどうすればよいですか?

C 標準ストリームを使用して、事前に割り当てられたバッファに効率的に書き込むにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-28 09:36:11762ブラウズ

How Can I Efficiently Write to a Pre-Allocated Buffer Using C   Standard Streams?

pubsetbuf を使用した標準ストリームの内部バッファの設定

問題:

stringstream を使用して既存のバッファにデータを書き込みます。プログラマは当初、コピーを使用してストリームの内容を過度のデータコピーを避けることを目的としています。その後、これを実現するために streambuf::pubsetbuf() を試行しましたが、Visual Studio 2008 C 標準ライブラリ実装の下でバッファが変更されないことがわかりました。

答え:

さらなる調査により、指定されたライブラリ実装の pubsetbuf メソッドは本質的に何も操作しないことが明らかになりました。特定のバッファーに書き込むようにストリームを構成するには、カスタム std::streambuf クラスを利用することをお勧めします。

template <typename char_type>
struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> {
    ostreambuf(char_type* buffer, std::streamsize bufferLength) {
        setp(buffer, buffer + bufferLength);
    }
};

このカスタム ストリーム バッファーは、提供されたバッファーを参照するように内部を初期化します。使用するには:

ostreambuf<char> ostreamBuffer(buffer, size);
std::ostream messageStream(&ostreamBuffer);

messageStream << "Hello" << std::endl;
messageStream << "World!" << std::endl;

このアプローチでは、IOStream ライブラリと std::ostream を使用して外部バッファに直接書き込むことができ、初期コピー メソッドに含まれる不必要なコピーを回避できます。

以上がC 標準ストリームを使用して、事前に割り当てられたバッファに効率的に書き込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。