zoukankan      html  css  js  c++  java
  • 代码优化避免滥用系统调用

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

    减少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 

  • 相关阅读:
    Find cmd
    splitFile2SmallFile
    IPC-->PIPO
    Thread and shared lock
    Python Thread related
    linux 文件系统
    linux commands
    关于 gnome3 无法显示应用程序所有界面的反馈
    Windows 网络编程
    常见端口 HTTP代码
  • 原文地址:https://www.cnblogs.com/moonflow/p/2461695.html
Copyright © 2011-2022 走看看