Tôi chỉ đọc a Wikipedia article on Copy-on-write (tò mò nếu có bất kỳ hệ thống tập tin hỗ trợ nó), và đã rất ngạc nhiên bởi những đoạn văn sau:hỗ trợ Copy-on-viết trong STL
COW cũng được sử dụng bên ngoài hạt nhân, trong thư viện, ứng dụng và mã hệ thống. Lớp chuỗi cung cấp bởi thư viện chuẩn C++, ví dụ, được thiết kế đặc biệt để cho phép triển khai copy-on-write:
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
Tôi không biết rằng copy-on-write được mỗi hỗ trợ trong STL . Điều đó có đúng không? Nó có áp dụng cho các lớp STL khác không, ví dụ: std::vector
hoặc std::array
? Trình biên dịch nào hỗ trợ tối ưu hóa đó (đặc biệt, tôi tự hỏi về G ++, trình biên dịch C++ của Intel và trình biên dịch C++ của Microsoft)?
Trên thực tế, 'std :: chuỗi' có thể không được sao chép-on-viết nữa, xem [ở đây] (http: // stackoverflow .com/a/16093748/256138). – rubenvb
Các yêu cầu đặt trên 'std :: vector' và' std :: array' loại trừ COW cho các loại đó. Và các yêu cầu áp đặt trên 'std :: string' trong C++ 11 cũng loại trừ COW cho các chuỗi. – juanchopanza
Một ví dụ về trình biên dịch hỗ trợ copy-on-write là Visual C++ 6.0. Nhưng không được hỗ trợ nữa kể từ phiên bản mới hơn. Như đã nói, không được hỗ trợ nữa. – Gonmator