Heim >Backend-Entwicklung >C++ >Wie kann ich mit C-Standard-Streams effizient in einen vorab zugewiesenen Puffer schreiben?

Wie kann ich mit C-Standard-Streams effizient in einen vorab zugewiesenen Puffer schreiben?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-28 09:36:11744Durchsuche

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

Internen Puffer für Standard-Streams mithilfe von pubsetbuf festlegen

Problem:

Bei einem Versuch Beim Schreiben von Daten in einen vorhandenen Puffer mithilfe eines Stringstreams verwendete ein Programmierer ursprünglich Copy, um den Stream-Inhalt in den Puffer zu übertragen, um übermäßige Datenmengen zu vermeiden Kopieren. Anschließend versuchten sie, dies mit streambuf::pubsetbuf() zu erreichen, stellten jedoch fest, dass dadurch der Puffer unter der Visual Studio 2008 C-Standardbibliotheksimplementierung nicht geändert wurde.

Antwort:

Bei weiteren Untersuchungen stellte sich heraus, dass die pubsetbuf-Methode in der gegebenen Bibliotheksimplementierung im Wesentlichen ein No-Op war. Um einen Stream so zu konfigurieren, dass er in einen bestimmten Puffer schreibt, wird die Verwendung einer benutzerdefinierten std::streambuf-Klasse empfohlen:

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);
    }
};

Dieser benutzerdefinierte Stream-Puffer initialisiert seine Interna, um auf den bereitgestellten Puffer zu verweisen. Um es zu verwenden:

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

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

Dieser Ansatz ermöglicht das direkte Schreiben in einen externen Puffer mithilfe der IOStream-Bibliothek und std::ostream und umgeht so das unnötige Kopieren, das mit der anfänglichen Kopiermethode verbunden ist.

Das obige ist der detaillierte Inhalt vonWie kann ich mit C-Standard-Streams effizient in einen vorab zugewiesenen Puffer schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn