某个dos程序需要很大内存以把计算结果写入文件中,在winxp下运行该程序会报错"stack overflow", 怎么办?(200分)

  • 主题发起人 主题发起人 小小峰
  • 开始时间 开始时间

小小峰

Unregistered / Unconfirmed
GUEST, unregistred user!
某个dos程序需要很大内存,以便把计算结果写入文件中(有100K左右),在winxp下运行该程序会报错"stack overflow", 怎么办?
 
我猜想是不是这样子:
16位应用程序,在32位系统上运行,导致错误?
在执行文件的属性里修改兼容模式在95下试试。
 
保存时先写到缓冲区
 
修改该dos程序属性的兼容性项为:用Windows 95兼容模式运行这个程序,
还是会出错: stack overflow ,用mem /c 得如下:

Conventional Memory :

Name Size in Decimal Size in Hex
------------- --------------------- -------------
MSDOS 43712 ( 42.7K) AAC0
KBD 3296 ( 3.2K) CE0
EMM 176 ( 0.2K) B0
HIMEM 1248 ( 1.2K) 4E0
MOUSE 13120 ( 12.8K) 3340
COMMAND 4240 ( 4.1K) 1090
COMMAND 5408 ( 5.3K) 1520
FREE 112 ( 0.1K) 70
FREE 583792 (570.1K) 8E870

Total FREE : 583904 (570.2K)

Upper Memory :

Name Size in Decimal Size in Hex
------------- --------------------- -------------
SYSTEM 258032 (252.0K) 3EFF0
FREE 4080 ( 4.0K) FF0

Total FREE : 4080 ( 4.0K)

Total bytes available to programs (Conventional+Upper) : 587984 (574.2K)
Largest executable program size : 582352 (568.7K)
Largest available upper memory block : 4080 ( 4.0K)

4194304 bytes total EMS memory
4194304 bytes free EMS memory

19922944 bytes total contiguous extended memory
0 bytes available contiguous extended memory
15663104 bytes available XMS memory
MS-DOS resident in High Memory Area
 
我只是用ShellExecute来运行该dos程序,没源程序就无法在保存时写到缓冲区。
 
另一台机同样是xp系统,不过内存大些,运行时不会出错,其mem/c 结果如下,看来
错误不是16位应用程序在32位系统上运行才导致的。

Conventional Memory :
Name Size in Decimal Size in Hex
------------- --------------------- -------------
MSDOS 13136 ( 12.8K) 3350
KBD 3296 ( 3.2K) CE0
HIMEM 1248 ( 1.2K) 4E0
COMMAND 3680 ( 3.6K) E60
COMMAND 4304 ( 4.2K) 10D0
FREE 112 ( 0.1K) 70
FREE 629360 (614.6K) 99A70
Total FREE : 629472 (614.7K)

Upper Memory :
Name Size in Decimal Size in Hex
------------- --------------------- -------------
SYSTEM 204784 (200.0K) 31FF0
MOUSE 13120 ( 12.8K) 3340
FREE 44176 ( 43.1K) AC90

Total FREE : 44176 ( 43.1K)

Total bytes available to programs (Conventional+Upper) : 673648 (657.9K)
Largest executable program size : 628480 (613.8K)
Largest available upper memory block : 44176 ( 43.1K)

19922944 bytes total contiguous extended memory
0 bytes available contiguous extended memory
15663104 bytes available XMS memory
MS-DOS resident in High Memory Area
 
这两台机的最大可用上位内存(Largest available upper memory block)差10倍, 为什么?
 
我机器上的:

Conventional Memory :

Name Size in Decimal Si
------------- --------------------- ---
MSDOS 12112 ( 11.8K)
KBD 3296 ( 3.2K)
HIMEM 1248 ( 1.2K)
COMMAND 4192 ( 4.1K)
DOSX 34720 ( 33.9K)
FREE 112 ( 0.1K)
FREE 599488 (585.4K)

Total FREE : 599600 (585.5K)

Upper Memory :

Name Size in Decimal Si
------------- --------------------- ---
SYSTEM 196592 (192.0K)
DOSX 128 ( 0.1K)
MOUSE 13120 ( 12.8K)
MSCDEXNT 464 ( 0.5K)
REDIR 2672 ( 2.6K)
FREE 1376 ( 1.3K)
FREE 47664 ( 46.5K)

Total FREE : 49040 ( 47.9K)

Total bytes available to programs (Conventiona
Largest executable program size :
Largest available upper memory block :

1048576 bytes total contiguous extended mem
0 bytes available contiguous extended
941056 bytes available XMS memory
MS-DOS resident in High Memory Area
 
堆栈错误,一般是因为递归调用层数太多引起
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
675
import
I
后退
顶部