ขนาดบัฟเฟอร์ที่เหมาะสมที่สุดสำหรับ fread / fwrite [ปิด]


10

ขนาดบัฟเฟอร์ใดที่ฉันควรเลือกสำหรับอ่าน / เขียนไฟล์ผ่านฟังก์ชั่น POSIX fread / fwrite

c 

คำถามนี้แปลเป็นภาษาท้องถิ่นแล้ว มันเกี่ยวข้องกับโปรแกรมเฉพาะที่คุณกำลังเข้ารหัสในขณะนี้
วิศวกรโลก

ฉันหมายถึงกรณีทั่วไป หลายโปรแกรมต้องการอ่าน / เขียนไฟล์ทั้งหมดด้วยขนาดที่ไม่รู้จัก (เช่นgrep, cp)

คุณหมายถึง POSIX read/ writeฟังก์ชั่นหรือ ANSI / ISO / IEC fread/ fwriteฟังก์ชั่น?
Jan Hudec

คำตอบ:


6

ฟังก์ชัน ANSI / ISO fread/fwriteถูกบัฟเฟอร์ บัฟเฟอร์มักจะเป็น 8 KiB และให้ความละเอียดเป็นอิสระจากสิ่งที่คุณใช้ในรหัสของคุณ มันอาจจะเหมาะสมที่จะเพิ่มบัฟเฟอร์สักหน่อยหรืออาจจะเพิ่มตามค่าด้านล่าง สำหรับการถ่ายโอนจำนวนมากพวกเขาจะช้าลงเล็กน้อยเนื่องจากการทำสำเนาเพิ่มเติม

สำหรับread/writeฟังก์ชั่นPOSIX นั้นขึ้นอยู่กับระบบปฏิบัติการและอุปกรณ์และอื่น ๆ อีกมากมาย แต่ประสบการณ์จริงคือคุณไม่ได้รับการปรับปรุงประสิทธิภาพโดยการเพิ่มบัฟเฟอร์เกินกว่าสิบเท่าของ KiB ดังนั้น 32 หรือ 64 KiB จึงเหมาะสม

ในบางระบบการพึ่งพามีขนาดใหญ่กว่าในบางระบบ บน Linux ความแตกต่างมักจะน้อยกว่า 8 KiB (ดังนั้นบัฟเฟอร์เริ่มต้นจึงใช้ได้) เช่นบน Windows CE (โดยใช้ Native API ซึ่งไม่มี POSIX) ยิ่งใหญ่กว่า 64 KiB ก็ยังช่วยได้ มันอาจขึ้นอยู่กับอุปกรณ์


ดังนั้น 8k สำหรับ I / O ที่บัฟเฟอร์ (เช่นfread, fwrite) และ 32 / 64K สำหรับ Unbuffered? หากมีการส่งข้อมูลภาพเหตุผลใดที่จะเลือกบัฟเฟอร์หรือไม่บัฟเฟอร์?
Francesco Boi

1
@FrancescoBoi, 8k เป็นค่าเริ่มต้นสำหรับบัฟเฟอร์ที่คุณสามารถเปลี่ยนได้เท่านั้น จุดบัฟเฟอร์คือการหลีกเลี่ยงการสลับบริบททั้งหมดเมื่อคุณดำเนินการสองสามไบต์ต่อครั้ง สำหรับภาพที่คุณต้องการหรือมีทั้งหมดแล้ว unbuffered จะดีกว่าเพราะข้ามการประมวลผลเล็กน้อย
Jan Hudec
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.