動的配列のメモリー確保でのエラー


Taku  2001-12-29 11:23:59  No: 412

動的配列で必要に応じ、
setLength(xxx,length(xxx)+100);
のように、順次配列数を増やして行くプログラムで
一定のところに達すると
EoutofMemory  「メモリーが足りません」のエラーが出ます
通常は、Windowsがハードディスクにスワップしてくれると思っていました
(メモリー、HD自体にも十分な空きがあります)
エラーを回避する方法をお願いします。


にしの  2001-12-29 18:45:10  No: 413

具体的には、どのくらいの大きさでエラーが出るのでしょうか。
内部で、LongInt型として定義されているので、2147483647を超えると負の数となり、エラーが発生します。

ここからWIN32APIの話になります。
ヒープメモリが不足しても、エラーになると思います。GlobalAllocの動作がそうなので。
VirtualAllocなら、仮想アドレス空間から確保できるようです。
# 未確認


横槍くん  2001-12-29 20:43:34  No: 414

SetLengthでの動的配列は動作が遅いので
GetMemまたはAllocMemを使ったほうが言いと思います。


Taku  2001-12-29 20:51:51  No: 415

にしの様
いつも有り難うございます
大きさは、無謀かと思いますが
レコード型の変数を割り当てています
integer  x2
Tcolor  x1
byte x4
Double x9
boolean x1
string x1(ほとんど代入していない)
以上で、配列が30,000を越えたあたりです

VirtualAllocについては初めてAPIヘルプを見ました
少し勉強してみます


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加