簡體   English   中英

DOS / 4GW致命錯誤(1307):內存不足

[英]DOS/4GW Fatal Error (1307): not enough memory

我正在嘗試在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

問題的答案是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"

我想幫助維護為什么這個設置存在,才失去了歷史。

短版本 :破壞的DOS擴展器使用16位有符號整數。 任何大於32,768字節(32 MB)的內容都會導致它們失敗。


Thomas R. Nicely在2007年發帖指出了這個問題:

Windows Vista將非Win32應用程序限制為32 MB內存 存檔

然后有一個2010年的usenet帖子提醒我們一個操作系統限制了DPMI可用的內存量:


我最近在Windows Vista的DPMI服務器上遇到了Thomas R. Nicely的WWW頁面。 這很困惑。 這些人對M. Nicely的頁面問題有一些非常明智的說法。)難怪它是,如果這是你向M.解釋事情的方式,正如xe聲稱的那樣。 ( - :

事實上,這個DPMI服務器限制是另一個例子。 M.很好地將此視為對gcc的某種神秘陰謀。 實際上,正如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時將DOS游戲列為一些特定的違規者,並且在OS / 2下運行DOS游戲的整個常見問題解答列出了各種不同的DPMI_MEMORY_LIMIT (以及其他)設置,以使這些游戲能夠很好地發揮作用使用操作系統而不會不必要地咀嚼內存,只是因為VDM中的DPMI服務器可以讓其他人使用。

同樣,NTVDM根本不是“怪異”。 它正在實現一個設置和限制,它與虛擬DOS機器中的課程相同。 即使是默認的32MiB也不例外。 OS / 2 DPMI_MEMORY_LIMITDPMI_MEMORY_LIMIT的默認值是(在OS / 2的最新版本中,如果內存可用)64MiB。 如果您一直讀到Raymond Chen的文章,那么甚至可以解釋為什么這些值是默認值:它是為了應對破壞的擴展DOS程序 ,它使用16位整數來測量KiB中的可用DPMI內存。 (NTVDM默認采用帶符號的16位整數.OS / 2的VDM默認采用無符號16位整數。)

所有這些 - 無論是從VDM內部陷入VM監視器,還是DPMI服務器限制來控制編寫嚴重的DOS程序 - 不是NTVDM是“怪異”或不尋常的,或微軟對那些認為編譯的人的秘密陰謀使用gcc意味着一個正在編譯擴展的DOS程序。 它們是VDM的簡單長期實踐,也是可以追溯到幾十年的虛擬機技術的普通工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM