在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
3.关于Linux下用C语言函数以及Linu/Unix函数文件写入缓存的问题 以 向文件中写1000 000个int类型数据一个文件中为例作为比较 C语言: ============================================================================ #include<stdio.h> #include<stdlib.h> int main(){ FILE* file = fopen("./codefile/C_speed.txt","w"); if(file == NULL){ perror("open"); exit(-1); } int i; for(i = 0; i < 1000000;i++) fwrite(&i,4,1,file); /*写入文件也可以用fprintf*/ //fprintf(file,"%d",i); fclose(file); return 0; } ============================================================================ Linux/Unix 函数写入 ============================================================================ #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> int main(){ int fd = open("./codefile/Linux_file.txt",O_CREAT | O_RDWR | O_TRUNC, 0666); if(fd == -1){ perror("open"); exit(-1); } int i; /*不自定义缓存*/ for(i = 0; i < 1000000; i++) write(fd,&i,i); /*自定义缓存*/ /*int arr[1000] = {}; for(i = 0;i < 1000000 ; i++ ){ arr[i%1000] = i; if(i%1000 == 999) write(fd,&arr,sizeof(arr)); }*/ close(fd); return 0; } ============================================================================= C和Linux/Unix函数写入速度比较 C语言 1.编译gcc C.c -o c 2.time c 查看函数运行需要的时间参数 real 0m0.086s user 0m0.048s sys 0m0.037s Linux/Unix函数写入不自定义缓存 1.编译gcc L.c -o L 2.time c 查看函数运行需要的时间参数 real 0m2.289s user 0m0.229s sys 0m2.049s 会发现,Linux/Unix函数的写入相同数据所需要的时间远远大于C语言函数写入的时间。 但如果Linux/Unix函数自定义缓存 1.编译gcc l.c -o l 2.time c 查看函数运行需要的时间参数 real 0m0.053s user 0m0.015s sys 0m0.027s 可以看到如果用Linux/Unix函数写入,并且定义缓存的话,会比C语言函数写入速度快。但如果Linux/Unix函数写入不自定义缓存 的话我们会发现,Linux/Unix函数的写入相同数据所需要的时间远远大于C语言函数写入的时间。 主要原因是Linux/Unix本身自己 不带缓存,所以每次写一次数据,就需要通过内核向文件里写一次。1000000个数据就需要写1000000次。 而C语言写函数自带内存, 当写数据时,可以先将数据写入缓存区,等缓存区数据满了之后再向文件写入。 Unix/Linux自定义缓存后,写入速度明显快于C语言的写入数。 当在某些需要大量数据读写,需提升性能时,Unix/Linux的函数可以比C更好的发挥它的性能。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论