Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C DOS/4GW致命错误(1307):内存不足_C_Windows_Memory_Dos_Watcom - Fatal编程技术网

C DOS/4GW致命错误(1307):内存不足

C DOS/4GW致命错误(1307):内存不足,c,windows,memory,dos,watcom,C,Windows,Memory,Dos,Watcom,我正在尝试在Win7 32位操作系统中运行dos/4gw应用程序。我收到以下错误消息, DOS/4GW致命错误(1307):内存不足 当我在WinXP 32位操作系统中运行相同的应用程序时,它工作正常,没有问题 dos/4gw应用程序是使用Watcom C编译器构建的 mem命令显示以下可用内存: 655360字节常规内存总量 MS-DOS可用的655360字节 580640最大可执行程序大小 总内存16777216字节 16777216字节的可用EMS内存 32505856字节总连续扩展内存

我正在尝试在Win7 32位操作系统中运行dos/4gw应用程序。我收到以下错误消息,
DOS/4GW致命错误(1307):内存不足

当我在WinXP 32位操作系统中运行相同的应用程序时,它工作正常,没有问题

dos/4gw应用程序是使用Watcom C编译器构建的

mem命令显示以下可用内存:

655360字节常规内存总量
MS-DOS可用的655360字节
580640最大可执行程序大小
总内存16777216字节
16777216字节的可用EMS内存
32505856字节总连续扩展内存
0字节可用连续扩展内存
15580160字节可用XMS内存
MS-DOS驻留在高内存区

从上面可以清楚地看出,内存小于1MB。然而,我的程序需要的不仅仅是这些。基本上,我需要扩展我的DOS内存,以获得超过1MB的内存来运行我的DOS/4gw应用程序

有谁能帮忙解决这个内存问题吗

谢谢


-Anand

问题的答案是doynax发送的回复:


“我相信,在最新版本的Windows中,有一个垫片将可用的DPMI内存限制在32 MB,因为更古老的软件无法毫无准备地使用如此大量的RAM。您可以尝试在注册表中的HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\WOW下创建一个DpmiLimit项,以字节为单位将其调整为DWORD“

问题的答案是doynax发送的答复:


“我相信,在最新版本的Windows中,有一个垫片将可用DPMI内存限制在32 MB,因为更古老的软件无法毫无准备地使用如此大量的RAM。您可以尝试在注册表中的HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\WOW下创建一个DpmiLimit项,以字节为单位将其调整为DWORD“

我想帮助保留此设置存在的原因,以免它丢失到历史记录中

短版本:损坏的DOS扩展器使用了16位有符号整数。任何大于32768字节(32MB)的内容都会导致它们失败


Thomas R.Knight在2007年发表了一篇文章,指出了这个问题:

()

然后告诉我们,限制DPMI可用内存量的操作系统:

  • 从虚拟内存(如OS/2)开始就存在
  • 存在以防止行为异常的DPMI应用程序尝试分配2 GB内存(因为内存是虚拟的)

我最近在WindowsVista的网页上看到了ThomasR.Nelly的WWW页面 DPMI服务器。它很混乱。(吃一些吧。) 关于M.Nelly的页面,说些非常明智的事情。)和 难怪是这样,如果你是这样向M解释的。 很好,正如xe声称的那样。(-:

事实上,DPMI服务器限制是另一个恰当的例子。 M.很好地将此描述为某种神秘的反恐怖主义阴谋 事实上,正如M.bwakaz所指出的,这是简单的辩护 反对所有基于DPMI扩展的愚蠢和破碎的东西 DOS应用程序是已知的,例如分配所有内存 这在程序启动时可用,因为它们写得很糟糕。 bwakaz先生指出,任何人 想要理解这一点,请阅读

您提到的
DpmiLimit
设置实际上并不新鲜。 它只是在WindowsNT6上没有记录。OS/2VDM有一个 记录了近二十年的DPMI内存限制设置 设置为
DPMI\u MEMORY\u LIMIT
。您可以在Usenet和WWW 关于这一点的数百次讨论,可以追溯到1994年左右 上下调整的原因。在OS/2系统上可以打开 建立一个VDM设置笔记本,并获取描述 背景

陈雷蒙特别指出DOS游戏是一些特别的违规者 当涉及到滥用DPMI时,列出了各种不同的
DPMI\u内存\u限制
(和其他)设置,用于让此类游戏玩起来 与操作系统配合良好,不会不必要地占用内存, 只是因为VDM中的DPMI服务器会允许它们

再次强调,NTVDM一点也不“怪异”,它实现了一个 设置和限制是虚拟DOS课程的标准 机器。甚至32MiB的默认值也不少见。的默认值 OS/2 VDMs中的DPMI内存限制是(在最新版本的OS/2中,如果 记忆服务)64MiB。如果你读了陈雷蒙的文章 最后,我们甚至可以解释为什么这些值是最重要的 默认设置:它是用来处理破坏的扩展DOS程序的 使用16位整数测量KiB中的可用DPMI内存。(NTVDM 默认值采用有符号16位整数。OS/2的VDM默认值采用 无符号16位整数。)

所有这些东西——它们可能从内部被困在VM监视器中 VDM或DPMI服务器限制控制写得不好的DOS程序- 难道NTVDM不是“怪异”或不寻常的,或是秘密的阴谋吗 微软反对那些认为使用gcc编译意味着 一个是编译扩展的DOS程序,它们是简单的长期存在的程序 虚拟数据管理系统的实施规程和虚拟机的日常工作 可以追溯到几十年前的技术

我想在它被历史遗忘之前,帮助保存这种设置存在的原因

短版本:损坏的DOS扩展器使用了16位有符号整数。任何大于32768字节(32MB)的内容都会导致它们失败


Thomas R.Knight在2007年发表了一篇文章,指出了这个问题:

()

然后告诉我们,限制DPMI可用内存量的操作系统:

  • 从一开始就存在