gpt4 book ai didi

c - 'write' 函数的正确缓冲区大小是多少?

转载 作者:IT王子 更新时间:2023-10-29 00:23:01 25 4
gpt4 key购买 nike

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

最佳答案

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

这个传输大小的问题不一定会随着 mmap 消失。如果您映射一个文件,然后 memcpy 将一些数据放入映射中,您就会使页面变脏。该页面必须在稍后的某个时间刷新:不确定何时刷新。如果您制作另一个触及同一页面的 memcpy,该页面现在可能是干净的,而您又使其变脏了。所以它被写了两次。页面大小的倍数的页面对齐副本将是可行的方法。

关于c - 'write' 函数的正确缓冲区大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9662425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com