4-08 1,589PVs
好久没有更新博客。也是懒得不行了。今天贴一个代码,C语言的,可以将文件读取到内存。将文件读取到内存有好处。当文件比较大时。200M以上就算大文件了。频繁的读取一个文件会严重影响程序的运行速度。举个例子,我自己写的一个发包程序。假如没有读文件的部分,发包速度千兆网卡达到800+MBits/s,但是如果没发送一个数据包,就读取一次文件,发包速率就会大幅度降低。我个人实测结果会降到1.44MBits/s。实在太恐怖了。此外,频繁读取文件,还会严重影响CPU利用率。我之前写调试一个程序。会按照一定时间读取两个文本。两个文本会周期性的更新。读取周期和更新周期一样。正常情况下CPU利用率是0.3,加上读取文件后,CPU利用率高达100。还会超过100…可见频繁读取文件有多么的消耗系统资源。如果写程序追求性能,能不读就不读。
下面的程序是一个将文件读取到内存的程序,个人感觉很有用,分享一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <stdio.h> #include <stdlib.h> int main () { FILE * pFile; long lSize; char * buffer; size_t result; /* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */ pFile = fopen ("test.txt", "rb" ); if (pFile==NULL) { fputs ("File error",stderr); exit (1); } /* 获取文件大小 */ fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); rewind (pFile); /* 分配内存存储整个文件 */ buffer = (char*) malloc (sizeof(char)*lSize); if (buffer == NULL) { fputs ("Memory error",stderr); exit (2); } /* 将文件拷贝到buffer中 */ result = fread (buffer,1,lSize,pFile); if (result != lSize) { fputs ("Reading error",stderr); exit (3); } /* 现在整个文件已经在buffer中,可由标准输出打印内容 */ printf("%s", buffer); /* 结束演示,关闭文件并释放内存 */ fclose (pFile); free (buffer); return 0; } |
来,祭出mmap大法! 😈 😈 😈 好久没来佳伟哥这看看了
你这个太高端,我用不到。。。