VirtualAlloc和VirtualCopy的蕴含知识点

来源:互联网 发布:上海 淘宝服装运营招聘 编辑:程序博客网 时间:2024/04/29 14:17

引自:http://www.cppblog.com/milkyway/archive/2007/03/27/20738.html

1.VirtualAlloc用来在进程的虚拟地址空间中保留(reserve)或者提交(commit)页。在保留时以64KB为粒度,即保留空间以64K为单位。而提交虚拟地址时,则以页(典型大小为4KB)为单位。

2.VirtualCopy用来绑定一块物理内存到当前进程虚拟地址空间。参数里的lpvSrc既可以是内核段的虚拟地址也可以是物理地址(用page_physical来标记)。同时要注意lpvSrc的右移与否。

3.使用VirtualAlloc要包含Winbase.h;使用VirtualCopy时要包含plfuncs.h.两者都要链接coredll.lib.

4.在CE5.0之前,使用VirtualAlloc获得的虚拟地址空间分为两种情形:
(1)大小在2MB以下时,位于调用进程的虚拟空间中;
(2)大小大于2MB时,位于用户态的共享地址空间内(0x42000000-0x7E000000 )

posted on 2007

 

# re: Windows CE的存储与地址映射技术学习 2007-01-27 20:31 相思酸中有甜

在不同CPU下对I/O的编址方式不同.比如X86下是存储器和I/O端口分开编址,ARM下是把I/O端口映射到存储器的。

cached/uncached这个概念是硬件层面上的,与程序是OS还是应用或者驱动没有关系。如果一段SDRAM空间只有CPU访问,则应该使用CACHED地址,这样能获得最快的速度,而如果这段地址CPU与外设都会访问(比如DMA),则必须使用UNCACHED地址,这样CPU与外设的数据才能同步.

 

 

原创粉丝点击