为什么数组的BUFFSIZE要定义为4096比较好?

先看一个程序:

//page 69

#include "apue.h"


#define BUFFSIZE 4096


int main(int argc,char *argv[])

{


        int n;

        char buf[BUFFSIZE];


        while ((n =read(STDIN_FILENO, buf, BUFFSIZE)) >0 )

                if (write(STDOUT_FILENO, buf, n-1) != (n-1))

                        printf("write err!\n");


        if (n <0)

                printf("read err\n");


        return(0);

}


系统CPU时间(system CPU time):  系统执行进程时,进程调用系统内核接口(read, write, sbrk等,放在man 手册的2区),CPU执行这个内核接口所花费的时间。

上面的程序来说,如果读入的是一个很大的,比如103316352个Byte字节的文件(书上的例子),那么,BUFFSIZE的大小,对于System CPU time的值是有影响的。

因为,特别的来讲,测试这个程序的环境是Linux,ext2文件系统,该文件系统的blocks 为4096-Bytes。为什么BUFFSIZE设置为4096个字节的时候,System CPU time最小呢? 因为,read函数读入4096个字节,正好是一个块,如果大于或者小于4096,那么就越块了,这样read函数会阻塞在那里,等着文件系统去翻下一个block,这样就耽误了时间,这个时间就是由于read阻塞而浪费的系统CPU时间。

这个也是很多地方讲的所谓的“4K对齐”吧!


你可能感兴趣的:(操作系统,linux)