为什么数组的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对齐”吧!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值