C++ iostreams cung cấp quyền kiểm soát xem luồng C++ có được đồng bộ với luồng C qua std::ios_base::sync_with_stdio()
hay không. Tắt đồng bộ hóa luồng cho phép triển khai thư viện chuẩn sử dụng bộ đệm không đồng bộ độc lập cho luồng C++ và luồng C để có khả năng cải thiện hiệu suất.Lợi ích tiềm năng của việc cho phép các luồng C++ và C có thể đệm một cách độc lập là gì?
Tại sao nó được coi là quan trọng để mở cửa cho người triển khai sử dụng bộ đệm io độc lập riêng biệt cho luồng C và C++? Tôi không thấy làm thế nào điều này có khả năng có thể cải thiện hiệu suất so với một bộ đệm io. Cho phép thư viện chuẩn một bộ đệm io ở cấp độ chương trình có thể giảm số lượng cuộc gọi thường tốn kém đến các cơ sở OS io cơ bản, nhưng điều gì có thể là lợi thế của hai bộ đệm io?
Có lý do kỹ thuật nào cho các bộ đệm riêng biệt cho luồng C và C++ có thể mang lại hiệu suất hay thiết kế chỉ là một tạo tác lịch sử?
Có phải bằng cách nào đó phải làm với ủy ban muốn người triển khai C++ có thể triển khai thư viện chuẩn C++ bằng cách xây dựng dựa trên các triển khai thư viện chuẩn C hiện có của họ?
Tôi đang tìm kiếm nhiều hơn "tiêu chuẩn nói như vậy".
Nếu đặc điểm hệ điều hành là cần thiết để giải thích lý do, câu trả lời được sử dụng làm ví dụ về cơ sở io được cung cấp bởi hệ điều hành thực hoặc để giải thích một hệ điều hành giả thuyết, nhưng hợp lý.
Edit: Để làm rõ, câu hỏi không được lý do tại sao dòng đồng bộ nên ì ạch hơn. Câu hỏi đặt ra là tại sao tiêu chuẩn C++ được thiết kế với giả định rằng có thể có hai bộ đệm io ở tất cả và tại sao lại để khả năng mở đó hữu ích cho người thực hiện. std::ios_base::sync_with_stdio()
chỉ xảy ra là hậu quả của giả định này.
Điều này nghe giống như câu trả lời đúng, nhưng bạn có thể cụ thể hơn về những gì có thể là không thể hoặc đưa ra một ví dụ? (Ví dụ, một ví dụ hợp lý) – Praxeolitic
@Praxeolitic: Ví dụ đơn giản, ai đó viết một '' có thể cung cấp một luồng tương tự 'ungetc()' có thể đẩy lùi nhiều ký tự ngay cả khi đầu vào là một đường ống hoặc ổ cắm.Nếu triển khai '' không cung cấp bất kỳ tính năng nào như vậy, mã luồng có thể theo dõi các ký tự được đẩy lùi và để chúng xuất hiện vào lần nhập liệu tiếp theo từ luồng, nhưng sẽ không có cách nào cho dữ liệu đó xuất hiện nếu mã cố gắng 'fread' từ tệp cơ bản. –
supercat
Nó có vẻ giống như một đoạn mà tiêu chuẩn dự định để phù hợp với độ lệch này nhiều từ tiêu chuẩn (tiêu đề có tên là "iostreams.h", mở rộng không chuẩn cho iostreams, không có 'ungetc()'). Bạn có thể chỉ ra bất kỳ bằng chứng nào cho thấy ủy ban quan tâm đến việc triển khai "quasi-conforming" không? Thêm vào đó, nếu chúng ta giả sử rằng việc triển khai iostream và stdio bằng cách nào đó về cơ bản không tương thích, điều này có làm cho việc đồng bộ hóa không thể được không? – Praxeolitic