我试图在Win7 32位操作系统中运行dos / 4gw应用程序。我收到以下错误消息,
DOS/4GW fatal error (1307): not enough memory
当我在WinXP 32位操作系统中运行相同的应用程序时,它工作正常,没有问题。
dos / 4gw应用程序是使用Watcom C编译器构建的。
mem命令显示以下可用内存
655360 bytes total conventional memory
655360 bytes available to MS-DOS
580640 largest executable program size
16777216 bytes total EMS memory
16777216 bytes free EMS memory
32505856 bytes total contiguous extended memory
0 bytes available contiguous extended memory
15580160 bytes available XMS memory
MS-DOS resident in High Memory Area
从上面可以清楚地看出内存小于1MB。但是我的计划需要更多。基本上我需要扩展我的DOS内存以获得超过1MB的内存来运行我的dos / 4gw应用程序。
任何人都可以帮忙解决这个内存问题吗?
谢谢!
-Anand
答案 0 :(得分:0)
问题的答案是 doynax 发送的回复:
"I believe there is a shim in recent versions of Windows limiting the available DPMI memory to 32 MB, for yet more ancient software incapable of unprepared such wast quantities of RAM. You may try creating a DpmiLimit key under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WOW in the registry to adjust this with the limit in bytes as a DWORD"
答案 1 :(得分:0)
我想帮助保留为什么此设置存在,然后才会丢失到历史记录中。
短版:DOS扩展器损坏使用了16位有符号整数。任何大于32,768字节(32 MB)的内容都会导致它们失败。
Thomas R. Nicely在2007年发表了一篇指出问题的帖子:
Windows Vista restricts non-Win32 apps to 32 MB of memory (archive)
然后there's a 2010 usenet post that reminds我们认为操作系统限制了DPMI可用的内存量:
我最近在Windows Vista上看到了Thomas R. Nicely的WWW页面 DPMI服务器。这很困惑。 (These people有一些 关于M. Nicely的页面问题,这是非常明智的事情。)和 难怪它是,如果这是你向M解释的事情。 很好,正如xe声称的那样。 ( - :
这个DPMI服务器限制是另一个例子,事实上。 M.很好地将此视为某种神秘的阴谋反对 GCC。事实上,正如M. bwakaz指出的那样,这是简单的辩护 反对基于DPMI的所有愚蠢和破碎的事情 已知DOS应用程序可以做,例如分配所有内存 在程序启动时可用,因为它们编写得很糟糕。 M. bwakaz指出an article by Raymond Chen任何人 希望了解这一点应该阅读。
您提到的此
雷蒙德·陈(Raymond Chen)将DOS游戏列为一些特定的罪犯 当涉及滥用DPMI时,there's a whole FAQ for running DOS games under OS/2列出了各种不同的内容 获得此类游戏的DpmiLimit
设置实际上并不新鲜。 在Windows NT 6上它只是未记录的 .OS / 2 VDM已经有了 记录了 DPMI内存限制设置近二十年。该 设置为DPMI_MEMORY_LIMIT
。您可以阅读Usenet和WWW 关于这个问题的数百次讨论,可以追溯到1994年左右 上下调整它的原因。在OS / 2系统上,可以打开 一个VDM设置笔记本,并获得描述的在线帮助 设置。DPMI_MEMORY_LIMIT
(以及其他)设置 很好地与操作系统,而不是不必要地咀嚼内存, 只是因为VDM中的DPMI服务器会允许它们使用它们。同样,NTVDM根本不是“怪异”。它正在实施一个 设置和限制,这是虚拟DOS中课程的标准 机。即使是默认的32MiB也不例外。默认值为 OS / 2 VDM中的
DPMI_MEMORY_LIMIT
(在OS / 2的最新版本中,如果 内存服务)64MiB。如果你读过Raymond Chen的文章全部 到最后,甚至有一个解释为什么这样的值 默认值:它是为了应对损坏的扩展DOS程序 使用16位整数测量KiB中可用的DPMI存储器。 (NTVDM的 default假定有符号的16位整数。 OS / 2的VDM默认假设 无符号的16位整数。)所有这些 - 无论是从内部陷入VM监视器 VDM或DPMI服务器限制来控制编写严重的DOS程序 - 不是NTVDM是“怪异”或不寻常,或秘密阴谋 微软反对那些认为用gcc编译意味着这一点的人 一个是编译扩展的DOS程序。它们很简单 VDM的实践,以及虚拟机的普通工具 技术可以追溯到几十年。