Bạn muốn đầu ra không có bộ đệm bất cứ khi nào bạn muốn đảm bảo rằng đầu ra đã được ghi trước khi tiếp tục. Một ví dụ là lỗi tiêu chuẩn trong thư viện thời gian chạy C - điều này thường được bỏ đệm theo mặc định. Vì lỗi là (hy vọng) không thường xuyên, bạn muốn biết về chúng ngay lập tức. Mặt khác, đầu ra tiêu chuẩn được lưu vào bộ đệm đơn giản vì người ta cho rằng sẽ có nhiều dữ liệu hơn đi qua nó.
Một ví dụ khác là thư viện ghi nhật ký. Nếu thông báo nhật ký của bạn được giữ trong bộ đệm trong quy trình của bạn và quy trình của bạn kết xuất lõi, thì rất có khả năng đầu ra sẽ không bao giờ được ghi.
Ngoài ra, không chỉ các lệnh gọi hệ thống được giảm thiểu mà còn cả I / O đĩa. Giả sử một chương trình đọc một tệp một byte tại một thời điểm. Với đầu vào không có bộ đệm, bạn sẽ đi ra đĩa (tương đối rất chậm) cho mỗi byte mặc dù nó có thể phải đọc toàn bộ khối (bản thân phần cứng đĩa có thể có bộ đệm nhưng bạn vẫn đi ra bộ điều khiển đĩa sẽ chậm hơn so với truy cập trong bộ nhớ).
Bằng cách lưu vào bộ đệm, toàn bộ khối được đọc vào bộ đệm cùng một lúc sau đó các byte riêng lẻ được chuyển đến bạn từ vùng đệm (trong bộ nhớ, cực kỳ nhanh).
Hãy nhớ rằng bộ đệm có thể có nhiều dạng, chẳng hạn như trong ví dụ sau:
+-------------------+-------------------+
| Process A | Process B |
+-------------------+-------------------+
| C runtime library | C runtime library | C RTL buffers
+-------------------+-------------------+
| OS caches | Operating system buffers
+---------------------------------------+
| Disk controller hardware cache | Disk hardware buffers
+---------------------------------------+
| Disk |
+---------------------------------------+
FILE
bộ đệm nội bộ của một đối tượng (một luồng) hoàn toàn khác với mộtfgets
tham số bộ đệm bắt buộc. Điều này chỉ làm tôi bối rối trong nhiều giờ trước khi tôi viết một số mã để tìm ra nó. QAQ