- 论坛徽章:
- 0
|
一个mmap的问题,不知道发在本版合不合适,请大家指教。
如下代码,去掉那行注释,执行速度会慢300倍。前后区别就是把一个文件mmap了两次,性能差距这么大,mmap到底做了什么工作呢?- int main(int argc, char **argv){
- if(argc != 2){
- printf("usage: %s file_name\n",argv[0]);
- return EXIT_FAILURE;
- }
- char *file_name = argv[1];
- struct stat st;
- size_t file_len = 0;
- if(stat(file_name, &st) < 0){
- printf("The file [%s] not exist or not readable!\n",file_name);
- return EXIT_FAILURE;
- }
- file_len = st.st_size;
- int fd_map = open(file_name,O_RDWR);
- char *map_ro = (char*)mmap(0, file_len, PROT_READ, MAP_PRIVATE, fd_map, 0);
- char *map_rw = (char*)mmap(0, file_len, PROT_READ, MAP_PRIVATE, fd_map, 0);
- char c = '0';
- size_t i = 0;
- for(i=0;i<file_len; i++){
- c=map_ro[i];
- // c=map_rw[i];
- }
- munmap(map_ro,file_len);
- munmap(map_rw,file_len);
- close(fd_map);
- return EXIT_SUCCESS;
- }
复制代码 |
|