- 主题:像ultraedit那种几百兆的文件秒开是怎么做到的?
memmap就是纯扯淡,这个场景fseek一下就能慢了?
【 在 GoGoRoger 的大作中提到: 】
: Maping后还涉及渲染的问题吧,不太懂。
--
FROM 114.86.95.*
你估算一下渲染几个byte的字符需要多少cycle,也该明白memcpy几次,syscall几次在这个问题里完全无关紧要。
何况mmap用不好的话syscall反而更多。
【 在 marxn 的大作中提到: 】
: 你说seek也就罢了,fseek这个。。。
--
修改:ilovecpp FROM 58.37.63.*
FROM 58.37.63.*
显然,你不知道。
【 在 marxn 的大作中提到: 】
: 你确定你知道fseek是干啥的?
:
--
FROM 58.37.63.*
并没有什么方便的。场景是文本编辑器,没有随机访问。
【 在 z16166 的大作中提到: 】
: 之前有对比测试,提高不了速度。用起来方便点
--
FROM 58.37.63.*
第一,你跳到指定的行之后还是要读足够填满一屏的内容。
第二,特大文件要“秒开”就不会支持秒开后立即做你这个跳转。
mmap三种情况下有用:
1. 你需要在文件里跳来跳去,每次读几个字节(而不是几KB)
2. 文件内容mmap之后不用反序列化可以当作内存数据结构直接用
3. 共享内存ipc
其它地方用mmap徒增烦恼。
【 在 z16166 的大作中提到: 】
: ctrl + g,跳转到指定的行
: 不过貌似跟楼主的主要需求关系不大了。
:
--
修改:ilovecpp FROM 58.37.63.*
FROM 58.37.63.*
fread/read的意图(读多少字节)是明确写在参数里的。
mmap则是隐含的。io效率取决于内核的read ahead是否符合你的访问模式。你不用madvise去调整的话,默认策略是为mmap的主要访问场景--映射可执行文件--优化的。
比起fread/read,mmap用起来更需要技巧,最好只用在少数适用的场合。看见“我要io快”就条件反射念出“mmap”,“direct io”,“aio”之类的,说滥用也不冤。
【 在 z16166 的大作中提到: 】
: 为啥会有滥用的说法?
: 左手(CRT file io)可以吃饭,右手(os file mapping)也可以吃饭
: 还有第三只手(os file api)
: ...................
--
FROM 58.37.58.*
这方面两个平台好像差不多吧,你觉得区别是什么?
【 在 z16166 的大作中提到: 】
: 看来你们脑海里主要是linux的mmap,我脑海里的主要是win的file mapping
--
FROM 58.37.58.*