您的位置:首页 > 其它

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

2015-08-06 20:15 281 查看
先看一个程序:

//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对齐”吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: