動的配列で必要に応じ、
setLength(xxx,length(xxx)+100);
のように、順次配列数を増やして行くプログラムで
一定のところに達すると
EoutofMemory 「メモリーが足りません」のエラーが出ます
通常は、Windowsがハードディスクにスワップしてくれると思っていました
(メモリー、HD自体にも十分な空きがあります)
エラーを回避する方法をお願いします。
具体的には、どのくらいの大きさでエラーが出るのでしょうか。
内部で、LongInt型として定義されているので、2147483647を超えると負の数となり、エラーが発生します。
ここからWIN32APIの話になります。
ヒープメモリが不足しても、エラーになると思います。GlobalAllocの動作がそうなので。
VirtualAllocなら、仮想アドレス空間から確保できるようです。
# 未確認
SetLengthでの動的配列は動作が遅いので
GetMemまたはAllocMemを使ったほうが言いと思います。
にしの様
いつも有り難うございます
大きさは、無謀かと思いますが
レコード型の変数を割り当てています
integer x2
Tcolor x1
byte x4
Double x9
boolean x1
string x1(ほとんど代入していない)
以上で、配列が30,000を越えたあたりです
VirtualAllocについては初めてAPIヘルプを見ました
少し勉強してみます
ツイート | ![]() |