Який розмір буфера я повинен вибрати для читання / запису файлів через POSIX fread / fwrite функції?
grep, cp)
read/ writeфункції чи ANSI / ISO / IEC fread/ fwriteфункції?
Який розмір буфера я повинен вибрати для читання / запису файлів через POSIX fread / fwrite функції?
grep, cp)
read/ writeфункції чи ANSI / ISO / IEC fread/ fwriteфункції?
Відповіді:
Функції ANSI / ISO fread/fwriteбуферизовані. Буфер зазвичай становить 8 KiB, і це надає деталізацію незалежно від того, що ви використовуєте у своєму коді. Можливо, має сенс трохи збільшити буфер, можливо, до значення нижче. Для масової передачі вони завжди будуть трохи меншими, хоча завдяки додатковим копіям.
Для read/writeфункцій POSIX це залежить від операційної системи та пристрою та багатьох інших речей, але практичний досвід полягає в тому, що ви не отримаєте жодного покращення продуктивності, збільшуючи буфер понад десятки KiB, тому 32 або 64 KiB - це вірно.
У деяких системах залежність більша, ніж в інших. У Linux різниця зазвичай мінімальна вище 8 KiB (тому буфер за замовчуванням є нормальним), наприклад, у Windows CE (використовуючи рідний API; у них немає POSIX), навіть більший, ніж 64 KiB, як і раніше. Це також може залежати від пристрою.
fread, fwrite) і 32 / 64К для небуферізованних? Якщо для надсилання даних зображень існує якесь обґрунтування для вибору буферованого чи небуферованого?