登录注册
论坛
一粒金砂(初级)
60
0
扫一扫,分享给好友
68
74
81
61
引用 2 楼 guopeixin 的回复: 主要用在首先预留内存,后面再进行使用的情况,如下: ? ? 一个比较好的分配512块特殊内存的方法是这样做: #define PAGESIZE 1024? // Assume we're on a 1-KB page machine. // Reserve a region first. pMemBase = VirtualAlloc (NULL, PAGESIZE * 512, MEM_RESERVE, ? ? ? ? ? ? ? ? ? ? ? ? PAGE_NOACCESS); for (i = 0; i < 512; i++) ? ? pMem = VirtualAlloc (pMemBase + (i*PAGESIZE), PAGESIZE, ? ? ? ? ? ? ? ? ? ? ? ? ? ? MEM_COMMIT, PAGE_READWRITE); ? ? 代码首先保留了一块区域,页面将在以后被提交。因为区域已经被先保留了,提交页就不受64-KB限制(译者注:只有保留页最小值受64KB限制),等等,如果你系统中有512KB的可用内存,分配将会成功。
64
83
71
86
引用 4 楼 jiereliyi 的回复: 引用 2 楼 guopeixin 的回复: 主要用在首先预留内存,后面再进行使用的情况,如下: ? ? 一个比较好的分配512块特殊内存的方法是这样做: #define PAGESIZE 1024? // Assume we're on a 1-KB page machine. // Reserve a region first. pMemBase = VirtualAlloc (NULL, PAGESIZE * 512, MEM_RESERVE, ? ? ? ? ? ? ? ? ? ? ? ? PAGE_NOACCESS); for (i = 0; i < 512; i++) ? ? pMem = VirtualAlloc (pMemBase + (i*PAGESIZE), PAGESIZE, ? ? ? ? ? ? ? ? ? ? ? ? ? ? MEM_COMMIT, PAGE_READWRITE); ? ? 代码首先保留了一块区域,页面将在以后被提交。因为区域已经被先保留了,提交页就不受64-KB限制(译者注:只有保留页最小值受64KB限制),等等,如果你系统中有512KB的可用内存,分配将会成功。 上边是预留MEM_RESERVE----只是在虚拟内存分配,下边是提交MEM_COMMIT参数指定----与物理内存关联,这样就可以使用了。 如果要和具体的内存地址关联,就需要调用VirtualCopy函数。 我这样理解对不对?
123
发表回复 回帖后跳转到最后一页
EEWorld Datasheet 技术支持
查看 »