tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル実行時エラー7「メモリが不足しています」
記事No12989
投稿日: 2008/08/31(Sun) 15:27
投稿者iii
はじめて,投稿します.よろしくお願いいたします。
以下のコードを実行すると,最初のメッセージボックスでOKとした後で,実行時エラー7「メモリが
不足しています」というエラーメッセージがでます.
物理メモリは2GBです.タスクマネージャでメモリ使用量を見ても,最初のメッセージボックスの前で443MBが表示されますので,確かに物理メモリ内で余裕で収まっているようです.あと,もう少し小さい配列で徐々に確保していっても,1GBを越えるあたりで上記エラーメッセージがでます.なんとか大きな配列を複数確保したいのですが解決策はありませんでしょうか?


Dim D1(), D2(), D3(), D4()

Redim D1(4095, 4095)
Msgbox ""
Redim D2(4095, 4095)
Msgbox ""
Redim D3(4095, 4095)
Msgbox ""
Redim D4(4095, 4095)

[ツリー表示へ]
タイトルRe: 実行時エラー7「メモリが不足しています」
記事No12990
投稿日: 2008/08/31(Sun) 16:28
投稿者花ちゃん
Variant 型の変数を使っているから余計メモリが消費されるようです。
String 型にすれば、そのサイズでも確保できるかと思うのですが。

[ツリー表示へ]
タイトルRe^2: 実行時エラー7「メモリが不足しています」
記事No12991
投稿日: 2008/08/31(Sun) 17:35
投稿者iii
申し訳ありません。説明が足りなかったようです.
プログラムは,簡単のために,例として示しましたが,実は実際のプログラムデータは
4バイトの浮動小数点でして,8192X8192の配列を3つほど確保します.
これでも物理メモリにはかなり余裕のある状態なのに,VB6.0では,メモリが不足してい
ますとなります.
投稿してから,コンパイルして実行ファイルでやりましたら,状況が緩和されてさらに
メモリを確保することができましたが,やはり物理メモリをかなり残して,エラーとな
ります.あと小さめの配列(100MB程度)をどんどん確保する実験をしましたが,
その場合は,物理メモリギリギリまでエラー無しで確保できました.
しかし,やはり8192X8192のデータをなんとか確保したいです.
すみません,良いアドバイスをお願いいたします.


> Variant 型の変数を使っているから余計メモリが消費されるようです。
> String 型にすれば、そのサイズでも確保できるかと思うのですが。

[ツリー表示へ]
タイトルRe^3: 実行時エラー7「メモリが不足しています」
記事No12992
投稿日: 2008/08/31(Sun) 18:42
投稿者花ちゃん
> すみません,良いアドバイスをお願いいたします.

良いアドバイスも何も、メモリ不足のエラーが出ている以上、プログラムの見直しを
するしかないのでは。

一般的には、下記のサイトにかいてあるような対策はありますが、効果の程は?
http://chaichan.web.infoseek.co.jp/vbtips/VBMemo2006111601.htm

上記中の 参考URL の項もご覧になって下さい。

[ツリー表示へ]
タイトルRe^4: 実行時エラー7「メモリが不足しています」
記事No12993
投稿日: 2008/08/31(Sun) 21:59
投稿者iii
「良いアドバイスを」とは,先のアドバイスが悪いという意味ではありませんでした.
誤解を生んだようですみませんでした.
参考のURLありがとうございました.連続した領域のメモリの確保には,それなりのテク
ニックがいるのですね.よくわかりました.このあたりの作法を理解するようにして工夫
します.
ありがとうございました.

[ツリー表示へ]