C- DOS/4GW致命错误(1307):记忆不足



我正在尝试在Win7 32位OS中运行DOS/4GW应用程序。我收到以下错误消息, DOS/4GW fatal error (1307): not enough memory

当我在winxp 32位OS中运行相同的应用程序时,它可以正常工作,没有问题。

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内存,以使运行DOS/4GW应用程序获得超过1MB的内存。

任何人都可以帮助解决此内存问题吗?

谢谢!

-anand

问题的答案是 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_MACHINESYSTEMCurrentControlSetControlWOW in the registry to adjust this with the limit in bytes as a DWORD"

我想帮助保存为什么在中存在此设置,然后才丢失历史。

简短版本:损坏的DOS扩展器使用了16位签名的整数。大于32,768个字节(32 MB)的任何东西都会导致它们失败。


托马斯·R。

Windows Vista将非WIN32应用程序限制为32 MB的内存 (Archive)

然后有一个2010年USENET帖子提醒我们,一个操作系统限制了可用的内存量:

  • 自虚拟内存开始以来就已经存在(例如OS/2)
  • 存在以防止行为不当DPMI应用程序尝试分配2 GB的内存(因为内存是虚拟的)
  • 对于旧游戏,您可以找到给DPMI的常见问题解答,您应该应用

我最近遇到了托马斯·R(Thomas R.) DPMI服务器。这很困惑。(这些人有一些 关于M.好的页面问题要说的非常明智的话。) 难怪这是您向M解释事物的方式。 很好,正如Xe所说的那样。( - :

实际上,此DPMI服务器限制是另一个例子。 M.很好地将此表示为某种神秘的阴谋 海湾合作委员会实际上,正如M. Bwakaz指出的那样,这是简单的防御 反对所有基于DPMI的愚蠢和破碎的事物 已知DOS应用程序会执行,例如分配所有内存 这可以在程序启动中找到,因为它们写得不好。 M. Bwakaz指出了雷蒙德·陈(Raymond Chen)的一篇文章 想要理解这一点应该阅读。

您提到的这种DpmiLimit设置实际上并不是什么新鲜事物。 只是在Windows NT 6上只是无证件。OS/2 VDM有一个 记录了将近二十年的DPMI内存限制设置。这 设置为DPMI_MEMORY_LIMIT。您可以在Usenet和www上阅读 关于此的数百种讨论,可以追溯到1994年左右, 上下调整它的原因。在OS/2系统上可以打开 启动VDM设置笔记本,并获得在线帮助描述 环境。

雷蒙德·陈(Raymond Chen 当涉及滥用DPMI时,并且有一个整个常见问题解答 OS/2下的DOS游戏列出了各种不同的 DPMI_MEMORY_LIMIT(和其他)设置以获取此类游戏 与操作系统一起很好,不要不必要地咀嚼内存, 仅仅因为VDM中的DPMI服务器将允许它们。

再次,NTVDM根本不是"怪异的"。它正在实施 设置和一个极限,这是虚拟DOS中该课程的标准 机器。即使是32MIB的默认值也不罕见。默认值 OS/2 vdms中的DPMI_MEMORY_LIMIT是(在OS/2的最新版本中,如果 记忆服务)64mib。如果您读了雷蒙德·陈的文章 到最后,甚至有一个解释为什么这样的值是 默认值:要应对损坏的扩展DOS程序 使用16位整数测量KIB中可用的DPMI内存。(NTVDM 默认值假定签名的16位整数。OS/2的VDM默认值为 未签名的16位整数。)

所有这些东西 - 它们是从内部陷入VM监视器的 VDM或DPMI服务器限制以控制编写不好的DOS程序 - NTVDM不是"怪异",或者是不寻常的,也不是秘密的阴谋 微软反对那些认为与海湾合作委员会一起编译的人意味着 一个正在编译扩展的DOS程序。它们很简单 VDM的练习和虚拟机的经常运行 可以追溯到数十年的技术。

相关内容

  • 没有找到相关文章

最新更新