Kích thước bộ đệm tối ưu cho fread / fwrite [đã đóng]


10

Tôi nên chọn kích thước bộ đệm nào cho các tệp đọc / ghi thông qua các hàm POSIX fread / fwrite?

c 

Câu hỏi này quá cục bộ. Nó chỉ liên quan đến bất kỳ chương trình cụ thể nào bạn đang mã hóa vào lúc này.
Kỹ sư thế giới

Ý tôi là trường hợp chung. Nhiều chương trình cần đọc / ghi toàn bộ tệp với kích thước rất không xác định (như grep, cp)

Bạn có nghĩa là POSIX read/ writechức năng hoặc chức năng ANSI / ISO / IEC fread/ fwrite?
Jan Hudec

Câu trả lời:


6

Các fread/fwritechức năng ANSI / ISO được đệm. Bộ đệm thường là 8 KiB và điều đó mang lại độ chi tiết độc lập với những gì bạn sử dụng trong mã của mình. Có thể có ý nghĩa để tăng bộ đệm một chút, có lẽ với giá trị bên dưới. Đối với chuyển số lượng lớn, chúng sẽ luôn chậm hơn một chút do có thêm các bản sao.

Đối với các read/writechức năng POSIX, nó phụ thuộc vào hệ điều hành và thiết bị và nhiều thứ khác, nhưng kinh nghiệm thực tế là bạn không nhận được bất kỳ cải thiện hiệu suất nào bằng cách tăng bộ đệm vượt quá hàng chục KiB, vì vậy 32 hoặc 64 KiB là đúng.

Trên một số hệ thống, sự phụ thuộc lớn hơn so với các hệ thống khác. Trên Linux, sự khác biệt thường tối thiểu trên 8 KiB (vì vậy bộ đệm mặc định vẫn ổn), ví dụ như trên Windows CE (sử dụng API gốc; chúng không có POSIX) thậm chí còn lớn hơn 64 KiB. Nó cũng có thể phụ thuộc vào thiết bị.


nên 8k cho đệm I / O (ví dụ fread, fwrite) và 32 / 64K cho unbuffered? Nếu gửi dữ liệu hình ảnh, có bất kỳ lý do cụ thể để chọn bộ đệm hoặc không có bộ đệm?
Francesco Boi

1
@FrancescoBoi, 8k chỉ được mặc định cho bộ đệm mà bạn có thể thay đổi. Điểm của bộ đệm là để tránh tất cả các chuyển đổi ngữ cảnh khi bạn xử lý một vài byte mỗi lần. Đối với hình ảnh bạn thường cần hoặc có tất cả của nó và sau đó không có bộ đệm là tốt hơn vì nó bỏ qua một chút xử lý.
Jan Hudec
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.