shenhd
驱动牛犊
驱动牛犊
  • 注册日期2001-09-09
  • 最后登录2005-04-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1393回复:6

内存分配的问题?

楼主#
更多 发布于:2002-05-18 14:35
    我现在在User Mode分配一块至少1M的内存,然后用MmGetPhysicalAddress得到每4k的物理地址,但发现只有第一个4k能获得物理地址,后面的得出的物理地址全是零。
    请各位大侠帮小弟看看是什么问题?在User Mode应该怎么分配?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-05-18 16:33
user mode分配内存,一般是分配virtual address,我记得好像只会给第一页(4K)分配物理内存,其他的实际上不在物理内存的,需要的时候才分配。
我想应该是GlobalAlloc(),GlobalLock这几个函数吧。
shenhd
驱动牛犊
驱动牛犊
  • 注册日期2001-09-09
  • 最后登录2005-04-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-19 00:05
我现在用的就是GlobalAlloc,GlobalLock分配的内存。但最大也只能分配500K,超过500K就会出现上面的现象。
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-19 00:19
那你看看在堆里面分配内存,看看可不可以吧!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-05-19 16:43
用VirtualAlloc先保留一块地址空间(address space),在根据需要,在你保留的空间,提交(commit)物理空间。
#define PAGELIMIT 80            // ask for this many pages

lpvBase = VirtualAlloc(
                         NULL,                 // system selects address
                         PAGELIMIT*dwPageSize, // size of allocation
                         MEM_RESERVE,          // allocate reserved pages
                         PAGE_NOACCESS);       // protection = no access

lpvResult = VirtualAlloc(
                           (LPVOID) lpNxtPage, // next page to commit
                           dwPageSize,         // page size, in bytes
                           MEM_COMMIT,         // allocate a committed page
                           PAGE_READWRITE);    // read/write access
详细请看MSDN,SDK Documentation,Base Service,Memory
这样应该可以的。不保证non-paged
Ares
驱动小牛
驱动小牛
  • 注册日期2001-03-28
  • 最后登录2020-04-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望114点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-05-19 21:52
你可以先用VirtualLock锁定啊,用完后再解锁就行了
易水
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-05-20 09:09
faint,怎么忘了VirtualLock? :D
游客

返回顶部