为什么数组的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对齐”吧!
//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对齐”吧!
相关文章推荐
- [HDU 2196] Computer 树形dp
- USACO 1.4 ariprog 解题报告
- c语言头文件中定义全局变量的问题
- Android Studio配置Github
- HDU 1003 Max Sum
- MIT6.828 虚拟地址转化为物理地址——二级分页
- 用angularjs在循环遍历中绑定ng-model(转载---CSDN博客 )
- 课堂随笔04--关于string类的一些基本操作
- The constructor SimpleAdapter(new View.OnClickListener(){},...)is undefined的问题及解决
- MyBatis 快速入门
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- Integer to Roman
- HDU 5019 Revenge of GCD(简单枚举)
- Integer to Roman
- JMeter入门
- Fire Net(dfs)
- 分别在Linux和Windows下设置JVM内存
- 病毒传播
- LocalBroadcastManager源码
- POJ 2299 Ultra-QuickSort