读进程写的最佳缓冲区大小

Dip*_*pto 13 c c++ optimization performance memory-management

在我的函数中,我需要将文件中的一些数据读入缓冲区,操作数据并将其写回另一个文件.该文件大小未知,可能非常大.

如果我使用一个小缓冲区,将会有一个很长的读/写周期,这将花费很多时间.相反,长缓冲区意味着我需要消耗更多内存.我应该使用的最佳缓冲区大小是多少?这种情况是依赖的吗?

我在Windows中看到了一些像Tera copy这样的应用程序,可以高效地管理大量文件.我应该注意其他任何技术或机制吗?

注意:此程序将在Windows下运行.

wil*_*ilx 18

了解微软对IO大小的看法:http://technet.microsoft.com/en-us/library/cc938632.aspx.基本上,他们说你应该在64K块中做IO.

在*NIX平台上,struct stat有一个st_blksize成员说明什么应该是最小的IO块大小.


Dol*_*000 6

它确实是高度依赖于案例的,您应该只编写程序以便能够处理灵活的缓冲区大小,然后尝试最佳大小.

如果你从小处开始然后增加缓冲区大小,你可能会达到一定的大小,之后你将看不到或极小的性能提升,因为CPU花费了大部分时间来运行你的代码,以及来自I的开销./O已经变得可以忽略不计了.