代码优化避免滥用系统调用

编写代码时应当注意避免滥用系统调用

减少fread与read系统调用的次数

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <unistd.h>

#include <sys/mman.h>



void main()

{ 

   int fd = open("test.file",o);

   struct stat statbuf;

   char *start;

   char buf[2] = {0};

   int ret = 0;

   fstat(fd,&statbuf);

   start = mmap(NULL,statbuf.st_size,PROT_READ,MAP_PRIVATE,fd,0);

   do{

     *buf = start[ret++];

   }while(ret < statbuf.st_size);

}

同样是遍历整个文件,但是读文件的过程中不需要使用系统调用,直接把文件当成内存buffer来读就行了。其原理是:mmap的执行,仅仅是在内核中建立了文件与虚拟内存空间的映射关系。用户访问这些虚拟内存空间时,页表里面并没有这些空间的表项,于是CPU产生缺页异常。内核捕捉这些异常,逐渐将文件读入内存,并建立相关的页表项。

size_t fread(void*buffer,size_tsize,size_tcount,FILE*stream);

http://www.newsmth.net/pc/pccon.php?id=10003130&nid=377681

http://hi.baidu.com/_kouu/blog/item/e33c618a66cd3d769e2fb400.html 

原文地址:https://www.cnblogs.com/moonflow/p/2461695.html