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)
如果我应该写下这篇文章,每个大块应该有多大?
我同意miked和Jerome的大部分内容,但......仅适用于现代操作系统.如果您正在嵌入Flash文件系统,则有一些主要的例外情况.在这种环境中,如果您怀疑fwrite(),请使用带有大块的write()进行快速测试.
今天,我发现写入()的速度提高了4倍.这是由于嵌入式操作系统中的posix层将fwrite()s转换为fputc()s ...在这种情况下,SYNC'd底层flash文件只会被破坏.write()由更接近OS(Nucleus)的例程实现,其中块写入不会被分成字节.
只是说...如果你质疑这两个变种,可能最好只是尝试一下.
只需使用fwrite(不需要更低级别的系统调用)并将其作为一个块进行.较低级别的系统调用将弄清楚如何缓冲和拆分该写命令最佳.我从来没有能够在这样的事情上击败fwrite的表现 - 大型顺序写入.