物理内存到虚拟内存拷贝速度

David_Hu 2012-08-29 09:20:21

某一驱动内:
memcpy(tempBuf,v_gDmaAddr,sizeof(WORD)*(inValue->length));
v_gDmaAddr 是AllocPhysMem开辟的物理内存对应的虚拟地址,类型是PAGE_READWRITE | PAGE_NOCACHE
tempBuf是我应用传下来的虚拟内存地址
长度我固定设为10M
然后我发现我的拷贝速度有个现象:
第一次1.7S,后面多次都是300MS,
求解释啊
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhenghn2010 2012-08-29
  • 打赏
  • 举报
回复
应用的虚内存用到的时候也需要映射到物理内存上的 不是吗
David_Hu 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

PAGE_NOCACHE是不要cache的吧?
内存如果事先都映射申请好了,应该没其它能够影响的。

感觉有种情况,你的应用虚内存,开始没有映射到实际物理内存上吧?只有第一次操作时才有映射动作,所以第一次慢。
映射好后就不需要这个动作了,所以快些。
[/Quote]
应用虚拟内存是应用开辟的空间跟驱动的物理内存只有COPY关系,怎么会扯上映射
zhenghn2010 2012-08-29
  • 打赏
  • 举报
回复
PAGE_NOCACHE是不要cache的吧?
内存如果事先都映射申请好了,应该没其它能够影响的。

感觉有种情况,你的应用虚内存,开始没有映射到实际物理内存上吧?只有第一次操作时才有映射动作,所以第一次慢。
映射好后就不需要这个动作了,所以快些。
David_Hu 2012-08-29
  • 打赏
  • 举报
回复
cache导致的吗
zhenghn2010 2012-08-29
  • 打赏
  • 举报
回复
看看这个虚内存是这么申请得,有的不是立刻就映射好物理内存的,所谓的延迟映射,只有第一次读写时才映射。
David_Hu 2012-08-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

应用的虚内存用到的时候也需要映射到物理内存上的 不是吗
[/Quote]
这个按道理应该是开辟的时候就映射好了,我们在DEBUG的时候是可以有看到默认的一些值的。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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