fwrite和写入大小的性能

Pet*_*ith 7 c performance file-io

我正在写一个大型数字二维数组到二进制文件(最终大小~75 MB).

我在linux系统上这样做.首先,有没有比fwrite更好的方法或系统调用来尽可能快地写入文件?

其次,如果我应该使用fwrite,那么我应该把整个文件写成1个连续的行吗?

fwrite( buf, sizeof(float), 6700*6700, fp );
Run Code Online (Sandbox Code Playgroud)

或者把它写成一系列的块

fwrite( buf, sizeof(float), 8192, fp );
fwrite( *(buf+8192), sizeof(float), 8192, fp );
....
Run Code Online (Sandbox Code Playgroud)

如果我应该写下这篇文章,每个大块应该有多大?

cha*_*aro 7

我同意miked和Jerome的大部分内容,但......仅适用于现代操作系统.如果您正在嵌入Flash文件系统,则有一些主要的例外情况.在这种环境中,如果您怀疑fwrite(),请使用带有大块的write()进行快速测试.

今天,我发现写入()的速度提高了4倍.这是由于嵌入式操作系统中的posix层将fwrite()s转换为fputc()s ...在这种情况下,SYNC'd底层flash文件只会被破坏.write()由更接近OS(Nucleus)的例程实现,其中块写入不会被分成字节.

只是说...如果你质疑这两个变种,可能最好只是尝试一下.


mik*_*ked 6

只需使用fwrite(不需要更低级别的系统调用)并将其作为一个块进行.较低级别的系统调用将弄清楚如何缓冲和拆分该写命令最佳.我从来没有能够在这样的事情上击败fwrite的表现 - 大型顺序写入.