ich gerade a Wikipedia article on Copy-on-write lesen war (neugierig, ob es irgendwelche Dateisysteme sind, die es unterstützen), und wurde durch die folgende Passage überrascht:Copy-on-Write-Unterstützung in STL
COW auch außerhalb des Kernels verwendet wird, in Bibliothek, Anwendung und Systemcode. Die String-Klasse von der C++ Standardbibliothek zur Verfügung gestellt, beispielsweise wurde speziell zu ermöglichen Copy-on-Write-Implementierungen entwickelt:
std::string x("Hello");
std::string y = x; // x and y use the same buffer
y += ", World!"; // now y uses a different buffer
// x still uses the same old buffer
Ich wusste nicht, dass copy-on-write wurde jeder in STL unterstützt . Ist das wahr? Gilt es für andere STL-Klassen, z.B. std::vector
oder ? Welche Compiler unterstützen diese Optimierung (insbesondere frage ich mich über G ++, Intel C++ Compiler und Microsoft C++ Compiler)?
Eigentlich 'std :: string' nicht mehr copy-on-write sein können, finden Sie [hier] (http: // Stackoverflow .com/a/16093748/256138). – rubenvb
Die Anforderungen für "std :: vector" und "std :: array" schließen COW für diese Typen aus. Und Anforderungen, die an "std :: string" in C++ 11 gestellt werden, schließen auch COW für Strings aus. – juanchopanza
Ein Beispiel für einen Compiler, der Copy-on-Write unterstützt, war Visual C++ 6.0. Aber seit neueren Versionen nicht mehr unterstützt. Wie bereits erwähnt, wird nicht mehr unterstützt. – Gonmator