XP下申请大内存

Formular1 2010-07-19 02:58:20
我想申请一块内存,1G大小,出于性能的考虑,我希望它只能驻留在内存中,不能换页到硬盘上。而且这个内存还需要其它进程使用,也就是要跨进程使用,请问最高效的实现方式,思路?

系统是XP,VC2005
...全文
389 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
neocane 2010-07-23
  • 打赏
  • 举报
回复
非分页内存池中的页才不会被换出, 驱动程序中有控制页换入换出的方法, 用户态似乎没有吧.
job82824 2010-07-22
  • 打赏
  • 举报
回复
试试cache寄存器变量,把XP的虚拟内存设置成最小。不过估计会出问题。
hztj2005 2010-07-21
  • 打赏
  • 举报
回复
要控制分配内存的位置,可以参考《c++编程思想》13.5.5用这种语法:
classname * pclass=new (ploc) classname(100000);

但不知道,是否会交换到硬盘。
踏实每一步 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 formular1 的回复:]
我可以只申请800-900M内存,但希望只驻留在内存中,不要交换到磁盘上的page,其实最希望的是自己可以控制,何时驻留在内存中,何时交换到磁盘上,AWE在XP下不能用吧?
[/Quote]

实现可能性不大,windows下如果你分配的内存长时间不用,就会被放到虚拟内存中。物理内存提供给需要在使用的程序用。换过来说,如果你的程序一直被使用,那windows就不会用虚拟内存来替换你分配的物理内存。
Formular1 2010-07-21
  • 打赏
  • 举报
回复
我可以只申请800-900M内存,但希望只驻留在内存中,不要交换到磁盘上的page,其实最希望的是自己可以控制,何时驻留在内存中,何时交换到磁盘上,AWE在XP下不能用吧?
smallfishff 2010-07-20
  • 打赏
  • 举报
回复
申请1G内存问题不大.但你控制不了是否置换到虚拟内存的.程式要使用的数据全部都会在物理内存中.如果不使用的数据才置换到虚拟内存.程式未使用的数据都有可能被置换到虚拟内存.除非你关闭系统的虚拟内存.

你可以在申请内存上进行优化.不要一次申请1G内存.但又涉及到多程式共享内存.所以在每次需要分配时各程式需要加入判断条件.
liuhaifeng1976 2010-07-19
  • 打赏
  • 举报
回复
全局堆
hztj2005 2010-07-19
  • 打赏
  • 举报
回复
xp下最多可以申请到1G内存,如果超过你需要暗转64位的操作系统。我使用的是windows server 2003 64bit中文版,一次分配过2G以上内存。
大熊猫侯佩 2010-07-19
  • 打赏
  • 举报
回复
你如果要利用额外的物理内存在x86下应该用AWE
sunyouhao 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wang23432 的回复:]

引用 3 楼 3jaja 的回复:
//以下例子使用100M内存
HANDLE hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE, 0,1024000000,"1G内存");
void * p =MapViewOfFile(hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);

……
[/Quote]
他的 pd 应该是 p。
HANDLE hMap=CreateFileMapping(NULL,NULL,PAGE_READWRITE, 0,1024000000,"1G内存");
// ...
UnmapViewOfFile(p );
用这个方法应该可以,LZ可以试试
饭fan有引力 2010-07-19
  • 打赏
  • 举报
回复
友情帮顶
wang23432 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 3jaja 的回复:]
//以下例子使用100M内存
HANDLE hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE, 0,1024000000,"1G内存");
void * p =MapViewOfFile(hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);

//指针 p 指向 1G内存的起点,内存……
[/Quote]
UnmapViewOfFile(pd ); pd是指什么呢?
zhanshen2891 2010-07-19
  • 打赏
  • 举报
回复
如果是驱动的话可以直接申请非分页的内存,但是用户代码如何申请我也不知道,不过我也想知道一下,留个地方看看。
BlueMap 2010-07-19
  • 打赏
  • 举报
回复
没试过,帮顶。不过很好奇,这是要做什么。
3jaja 2010-07-19
  • 打赏
  • 举报
回复
//以下例子使用100M内存
HANDLE hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE, 0,1024000000,"1G内存");
void * p =MapViewOfFile(hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);

//指针 p 指向 1G内存的起点,内存不足才虚拟到硬盘
//处理..........................

UnmapViewOfFile(pd );
CloseHandle(hMap);
Formular1 2010-07-19
  • 打赏
  • 举报
回复
自己机器上使用,自己机器上装了4G内存。双核Cori
3jaja 2010-07-19
  • 打赏
  • 举报
回复
不是每台机器都有2G以上内存的,你的程序打算在自己的机器上使用?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧