DELPHI 1.0下如何突破640K的内存限制?(50分)

  • 主题发起人 主题发起人 foolishwolf
  • 开始时间 开始时间
F

foolishwolf

Unregistered / Unconfirmed
GUEST, unregistred user!
因为用户机器档次低,所以要用DELPHI 1.0
开发程序,但程序写得较大时,系统提示内存不够,
请问如何解决?
不能将某些功能形成外部EXE然后调用.
谢谢!!
 
"笨狼"

Delphi 1.0 开发的程序是不受640k系统内存限制的, 运行时内存不够你应该正大
虚拟内存才对
 
16位程序是可能出现内存不足的情况,
主要原因是win3.X对1M以下内存有限制,
系统资源都分配在1M以下,
如果1M以下被应用程序分配,就抱内存不足。
英文PC-Magazine有一篇关于这个话题的专门文章,
我手头一下还查不到,查到再说吧?

你还可以查一下自己程序的内存分配情况,是否不合理?
 
DELPHI 1.0也是在Windows上运行,因此并不受640K的限制huizhang说的对。
但Windows 3.x&95都存在64K的限制,请你搞清楚到底是什么问题才好回答。
 
If there's some code in your app that
uses DosAlloc to alloc memory (sometime
it is required, :( ), then that part will be restricted
withing 640K DOS System VM.
 
对不起各位,我的题目没有写对,
ZHAOYIPENG先生理解的意思是
才是我真正的问题,不好意思,请
各位大哥继续帮我,谢谢!
 
笨狼

以前见过突破64k限制的文章和程序, 但是都不是很理想, 很容易出问题,关键在于
16位的地址限制必须将程序分成64k的段。如果能够较理想地解决的话,borland 早
就作啦。

我看还是从你自己的程序结构上想办法吧。
 
foolishwolf:
我以前用Delphi1时也出现过内存不够的现象,原因是全局变量定义太多,
var A : array[1..500] of string和另外的一些全局变量.后来改用:
var A : array[1..500] of string[2]便解决了,您可以定义成Tpoint
相信没有问题.
good luck!
 
谢谢各位大哥!
我在DELPHI 1。0 又做了一个测试,
定义了一个array [0..9600] of string的类型;
当分配4个变量都属于这种类型时,系统告知数据段不足;
然后定义了四个array [0..9600] of string的指针,
然后在程序里面NEW分配内存,系统却不告警
这又是为什么呢?
另以前DELPHI高版本没有出来时,有一些较大
系统同样用1。0编写出来的,所以我想DELPHI 1。O下
的内存限制一定有办法突破。请继续帮我!
 
这时由于Delphi1.0编译出的程序用的是多代码段, 单数据段结构,
所以全局数据和函数,过程的局部数据(储存在堆栈段中)都不能
太多(每段只有64K)
然而New是在堆(heap)中分配空间的, DOS下的程序就可以到
600K, Windows 3.1下应该可以接近16M(还要看您的虚存设置)
 
对了, 静态数据在数据段容纳不下时, 编译器会拒绝编译, 但是
您用New申请空间, 这时一个运行时才发生的动作, 编译器当然
不会警告啦, :) (即使届时没有那么多空间可分配, 也不会警告,
只是通过返回值告诉您
 
谢谢.
我现在做程序是用的DELPHI 3.0,因为以前用1.0
编写时遇到过问题,当时是将某些功能做成另一个
EXE后才继续下去,但我记不太清当时遇到的关于
内存的哪方面的问题.
所以请大家可以将1.0下编程的内存方面的知识
尽量教授给我,如果劳动量大,我会给版主去信,
给各位多加分.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部