5766|11

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

VirtualAlloc,分配的空间大小可以超过32MB吗? [复制链接]

我的开发板有128M的内存。
OS分配32MB
RAM分配32MB
显存分配64MB
这样可以吗?
显存的空间需要用VirtualAlloc来做,我的bsp里是这么做的,但是它限制大小为小于32M。

最新回复

hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,MEM_PHY_SIZE,NULL); g_MemVirtBase = (DWORD)MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0); if (! VirtualCopy(        (PVOID)(g_MemVirtBase),                         (PVOID)(MESPAtoVA(MEM_PHY_BASEADDR, FALSE)),                         0x2000000, //前32MB                         PAGE_READWRITE | PAGE_NOCACHE))                 {                         VirtualFree((PVOID)g_BlockMemVirtBase, 0, MEM_RELEASE);                         return errorFlag;                 } if (! VirtualCopy(        (PVOID)(g_MemVirtBase+0x2000000),                         (PVOID)(MESPAtoVA((MEM_PHY_BASEADDR+0x2000000), FALSE)),                         (MEM_PHY_SIZE-0x2000000),//32MB~64MB部分                        PAGE_READWRITE | PAGE_NOCACHE))                 {                         VirtualFree((PVOID)g_BlockMemVirtBase, 0, MEM_RELEASE);                         return errorFlag;                 }   详情 回复 发表于 2009-7-6 16:24
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
VirtualCopy在Windows CE 5.0下有32MB的限制 ?
help里没看到这段。但是执行不成功。
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
分配太大的空间,失败是正常的!

虽然系统是有足够的空间,但是没有连续的,所以分配失败
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
分配32MB是可以的。
但是大于32MB的就出错。

从slot33~62 是对象存储和内存映射文件的区域,有几百兆的空间,应该有连续的吧?

是不是没个slot只有32MB,所以才出错呢?

网上的贴子,讲windows下,分配1GB都可以。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 wohuazhen 的回复:
分配32MB是可以的。
但是大于32MB的就出错。

从slot33~62 是对象存储和内存映射文件的区域,有几百兆的空间,应该有连续的吧?

是不是没个slot只有32MB,所以才出错呢?

网上的贴子,讲windows下,分配1GB都可以。


和一个slot是32M没有关系
CE内存管理,应用的虚拟空间是2G。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主用的是WinCE5.0,还是winCE6.0的?
如果是5.0的,每个slot的大小是32M的,但是这个和VirtualAlloc没有关系,因为VirtualAlloc分配的空间不在slot的32M中的
 
 
 

回复

56

帖子

3

TA的资源

一粒金砂(初级)

7
 
我用Wince5.0
RAM             82000000        02A00000        RAM
LINEARMEMORY         84A00000        00600000        RESERVED
BLOCKMEMORY        85000000        03000000        RESERVED

我现在改用CreateFileMapping映射48MB,用MapViewOfFile得到虚拟地址,
但用VirtualCopy来做虚拟地址和物理地址的映射时失败
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

8
 
我试过,达不到32M的,这不是PC机子。

当内存里面有碎片的时候,是无法分配大的内存的。
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 gooogleman 的回复:
我试过,达不到32M的,这不是PC机子。

当内存里面有碎片的时候,是无法分配大的内存的。

我现在改用CreateFileMapping映射48MB,用MapViewOfFile得到虚拟地址,
这个是可以成功的。只是在虚拟地址到物理地址映射不成功。
用virtualalloc+virtualcopy可以达到32M,但不能超过。这个我也试过。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
多分配几次不就行了。

wince6.0 下能在应用中使用virtualalloc+virtualcopy吗?如果可以估计可以弄到这个呢。
wince6.0 的内存管理有较大的改进了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
uping
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,MEM_PHY_SIZE,NULL);
g_MemVirtBase = (DWORD)MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0);
if (! VirtualCopy(        (PVOID)(g_MemVirtBase),
                        (PVOID)(MESPAtoVA(MEM_PHY_BASEADDR, FALSE)),
                        0x2000000, //前32MB
                        PAGE_READWRITE | PAGE_NOCACHE))
                {
                        VirtualFree((PVOID)g_BlockMemVirtBase, 0, MEM_RELEASE);
                        return errorFlag;
                }
if (! VirtualCopy(        (PVOID)(g_MemVirtBase+0x2000000),
                        (PVOID)(MESPAtoVA((MEM_PHY_BASEADDR+0x2000000), FALSE)),
                        (MEM_PHY_SIZE-0x2000000),//32MB~64MB部分                        PAGE_READWRITE | PAGE_NOCACHE))
                {
                        VirtualFree((PVOID)g_BlockMemVirtBase, 0, MEM_RELEASE);
                        return errorFlag;
                }
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表