词条 | VirtualAlloc |
释义 | VC概述VirtualAlloc是一个Windows API函数,它包含在windows系统文件Kernel32.dll中,编程时直接使用就可以了,不需要再下载。 该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页 如果用于内存分配的话,并且分配类型未指定MEM_RESET,则系统将自动设置为0; VC声明LPVOID VirtualAlloc( LPVOID lpAddress, // region to reserve or commit SIZE_T dwSize, // size of region DWORD flAllocationType, // type of allocation DWORD flProtect // type of access protection ); 说明该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页 如果用于内存分配的话,并且分配类型未指定MEM_RESET,则该内存自动被初始化为0; 参数表说明LPVOID lpAddress, 分配内存区域的地址。当你使用VirtualAlloc来提交一块以前保留的内存块的时候,lpAddress参数可以用来识别以前保留的内存块。如果这个参数是NULL,系统将会决定分配内存区域的位置,并且按64-KB向上取整(roundup)。 SIZE_T dwSize, 要分配或者保留的区域的大小。这个参数以字节为单位,而不是页,系统会根据这个大小一直分配到下页的边界DWORD flAllocationType, 分配类型 ,你可以指定或者合并以下标志:MEM_COMMIT,MEM_RESERVE和MEM_TOP_DOWN。 DWORD flProtect 指定了被分配区域的访问保护方式 分配类型 功能 可能的数值 含义 MEM_COMMIT为0x1000 分配指定保留的内存页的物理存储在内存或磁盘上的分页文件。该函数的内存初始化为零。 MEM_RESERVE0x2000 保留在没有任何实际的物理存储在内存或磁盘上的分页文件分配一个进程的虚拟地址空间的范围。 MEM_RESET0x80000 表示,在所指定的内存范围内的数据lpAddress的dwSize不再是利益。页面不应该被读出或写入到分页文件。然而,将再次使用的内存块后,所以它不应该decommitted的 。这个值不能使用任何其他的价值 。 分配类型 也可以是下列值 可能的数值 含义 MEM_LARGE_PAGES0x20000000的 分配内存使用大页面支持。 MEM_PHYSICAL0x400000 储备的地址范围,可用于地图地址窗口扩展(AWE)的网页。 MEM_TOP_DOWN0x100000 在尽可能高的地址分配内存。这可以比普通的拨款速度较慢,尤其是当有许多分配。 MEM_WRITE_WATCH0x200000 导致系统来跟踪分配的地区,都写在网页 。如果指定此值,则还必须指定MEM_RESERVE。 访问类型 PAGE_READONLY 该区域为只读。如果应用程序试图访问区域中的页的时候,将会被拒绝访问PAGE_READWRITE 区域可被应用程序读写 PAGE_EXECUTE 区域包含可被系统执行的代码。试图读写该区域的操作将被拒绝。 PAGE_EXECUTE_READ 区域包含可执行代码,应用程序可以读该区域。 PAGE_EXECUTE_READWRITE 区域包含可执行代码,应用程序可以读写该区域。 PAGE_GUARD 区域第一次被访问时进入一个STATUS_GUARD_PAGE异常,这个标志要和其他保护标志合并使用,表明区域被第一次访问的权限 PAGE_NOACCESS 任何访问该区域的操作将被拒绝 PAGE_NOCACHE RAM中的页映射到该区域时将不会被微处理器缓存(cached) 注:PAGE_GUARD和PAGE_NOCHACHE标志可以和其他标志合并使用以进一步指定页的特征。PAGE_GUARD标志指定了一个防护页(guard page),即当一个页被提交时会因第一次被访问而产生一个one-shot异常,接着取得指定的访问权限。PAGE_NOCACHE防止当它映射到虚拟页的时候被微处理器缓存。这个标志方便设备驱动使用直接内存访问方式(DMA)来共享内存块。 返回值如果调用成功,返回分配的首地址, 调用失败,返回NULL 你可以通过GetLastError函数来获取错误信息 笔记VirtualAlloc可以通过并行多次调用提交一个区域的部分或全部来保留一个大的内存区域。多重调用提交同一块区域不会引起失败。这使得一个应用程序保留内存后可以随意提交将被写的页。当这种方式不在有效的时候,它会释放应用程序通过检测被保留页的状态看它是否在提交调用之前已经被提交 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。