Je viens juste de lire a Wikipedia article on Copy-on-write (curieux de savoir s'il y a des systèmes de fichiers qui prennent en charge), et a été surpris par le passage suivant:support Copy-on-write dans STL
COW est également utilisé en dehors du noyau, dans la bibliothèque, l'application et le code système. La classe de chaîne fournie par la bibliothèque standard C de, par exemple, a été spécialement conçu pour permettre des implémentations de copie en écriture:
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
je ne savais pas qui a été tous pris en charge dans STL copie sur écriture . Est-ce vrai? Cela s'applique-t-il aux autres classes STL, par ex. std::vector
ou std::array
? Quels compilateurs supportent cette optimisation (en particulier, je m'interroge sur G ++, le compilateur Intel C++ et le compilateur Microsoft C++)?
En fait, 'std :: string' ne peut pas être copy-on-write plus, voir [ici] (http: // stackoverflow .com/a/16093748/256138). – rubenvb
Les emplacements requis sur 'std :: vector' et' std :: array' excluent COW pour ces types. Et les exigences imposées à 'std :: string' dans C++ 11 excluent COW pour les chaînes aussi. – juanchopanza
Un exemple de compilateur prenant en charge la copie sur écriture était Visual C++ 6.0. Mais pas supporté depuis les nouvelles versions. Comme dit précédemment, n'est plus supporté. – Gonmator