'write'函数的缓冲区大小是多少?

Mic*_*ine 16 c linux io file

我正在使用低级I/O函数'write'在我的代码中将一些数据写入磁盘(Linux上的C语言).首先,我将数据累积在内存缓冲区中,然后在缓冲区已满时使用"write"将数据写入磁盘.那么'write'的最佳缓冲区大小是多少?根据我的测试,它不是越大越快,所以我在这里寻找答案.

Kaz*_*Kaz 3

执行文件系统块大小的倍数的写入可能有一些优势,特别是当您要就地更新文件时。如果您向文件写入的数据块少于部分数据块,则操作系统必须读取旧数据块,合并新内容,然后将其写出。如果您按顺序快速写入小块,则不一定会发生这种情况,因为更新将在内存中的缓冲区上完成,而这些缓冲区稍后会刷新。不过,如果每次写入操作没有填充块(以及正确对齐的块:块大小的倍数,偏移量是块大小的倍数),偶尔您可能会触发一些低效率。

mmap 不一定能解决传输大小的问题。如果您映射一个文件,然后将memcpy一些数据放入映射中,则会使页面变脏。该页面必须在稍后的某个时间刷新:具体时间不确定。如果您制作另一个memcpy接触同一页面的页面,那么该页面现在可能是干净的,但您又使它变脏了。所以它被写了两次。页面大小倍数的页面对齐副本将是最佳选择。