请教一个 fseek后内存的问题

lishikai500 2014-04-26 03:46:06
我需要写一个查找文件key word的程序。
里面有一个函数是 返回在这个文件指定位置的一个char
用的是 fseek(fp,location,SEEK_SET);
然后read一个char。

因为这个函数经常会被调用,而且下一次调用时要查找的地址 很可能和上一次很相近
为了增加效率,我在考虑需不需要一次性把文件的 一个page 的东西读到一个buffer里,下次搜索如果位置相近
计算出char在buffer的位置。

还有,比较底层,如果调用fseek,内存会默认读硬盘的一个含有这个地址的page。如果下次我请求的和这个地址相近,会不会直接就map到相对应的内存里? 这样的话,那个buffer的想法就没有必要了。

求大神给解答一下, 谢谢
...全文
173 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2014-04-26
  • 打赏
  • 举报
回复
1. 已经有个多层缓存了:内核的预读取,CRT的IO流缓冲。如果你想对缓冲有更多控制的话,使用OS提供的无缓冲的API, 不要基于已经存在的多层缓存。 2. 你可以自己记录最近的查询结果,如果不在历史缓冲中再从文件流中查找并更新历史记录。这种方法简单有效。
lm_whales 2014-04-26
  • 打赏
  • 举报
回复
似乎不需要,具体还要看你做什么用。
一根烂笔头 2014-04-26
  • 打赏
  • 举报
回复
C库文件API执行系统调用操作如果过于频繁,会效率偏低,其实这些API已经和你考虑一样这样做了,它已经给你缓存了,至于缓存多少,你需要查看下它的实现(好像是FILE结构体中一个成员指定),这样就减少很多的系统调用,操作缓存内容,减少IO,而且满足大多数需求,如果你是特例,你可以是重做这些API; 不过我觉得映射也可行!

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧