先看一个程序:
//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对齐”吧!