VBで仮想メモリを確保するには?


まるこ  2003-05-26 20:30:51  No: 78038  IP: [192.*.*.*]

VB初心者です。
プログラム上で、仮想メモリとして512MのByte領域を取りたいのですが
VBでは、単純に Public または Dim で宣言すればいいだけなのでしょうか?
色々自分なりに調べてみたのですが、どうしていいのか分かりません。
もし、仮想メモリとして確保する方法があるのでしたら
現在使用できるメモリの取得なども可能なのでしょうか?
質問がトンチンカンかもしれませんが、よろしくお願い致します。

編集 削除
岡田 之仁  2003-05-28 05:07:09  No: 78039  IP: [192.*.*.*]

私が実現した方法では・・・

Virtual で始まる、Win32 API を探して内容を確認して下さい。
Global で始まる、Win32 APIでは、実メモリを確保・解放する
ことになり、搭載メモリ上限までしかアクセスできません。

VirtualAlloc等、Virtualで始まるAPIは、仮想記憶領域からメモリ
をマップしますので、スワップファイルの設定にもよりますが、実
メモリ以上の容量を取得することが可能です。しかしながら、実メモ
リ領域より大きなエリアをマップしたら、スワップファイルのアクセ
スが発生し、かなりパフォーマンスに影響が出ます。

が、Virtual関係のAPIでは、そのパフォーマンス劣化を少なからず
とも抑えるコーディング方法がありますので、頑張って調べてみて
下さい。

因みに、OSは?
OSによって、APIの処理に有する時間が全く違います。
それはOSの仮想メモリへのアクセス方法が違う為ですが・・・

尚、VBでおこなわれるのであれば、メモリ関係は、ActiveXにして
C言語(やC++)で作成するのが好ましいです。

以上。

編集 削除
まるこ  2003-05-29 15:30:27  No: 78040  IP: [192.*.*.*]

岡田様  ありがとうございます。
OSはNTです。まだ初心者でAPI関数を使った事が無いので勉強してみようと思います。もしサンプル等あるようでしたら是非情報を教えてください。(ちょっと甘えすぎでしょうか・・・)

一応実際にやりたい処理を書いてみます。

Type f_type
    D_pointer     As Long          'データポインタ(整数)
    ND_pointer    As Long          '次のデータポインタ(整数)
    D_len         As Integer       'データ長
    Sts           As Byte          'ステータス(0:正常,1:以上)
    Data          As String        '実データ(可変)
End Type

①このように定義した領域にデータを受信したとします。
  それを  VirtualAllocで確保した、10M〜512M(ユーザ指定)のByte領域に
  受信するごとに、追加していき、領域が一杯になったら、
  バイナリファイルとして保存します。

②保存したバイナリファイルをVirtualAllocで確保した領域に読み込み
  上記Typeで定義した領域に代入し、1フレームずつ画面に表示する。

ホントに申し訳ありません。
もしお時間ある様でしたら教えてください。
本やネット等でも調べているのですが、書いてある言葉自体が難しくて
なかなか理解に苦しんでいます。
ヨロシクお願い致します。

編集 削除
岡田 之仁  2003-06-03 02:10:47  No: 78041  IP: [192.*.*.*]

まず・・・
構造体に宣言されている項目で、可変長の文字列がありますネ!
これを実現させるには、なかなか骨です・・・
C言語で言いますと、可変文字列の長さ分を別アドレスを取得し
そのポインタを構造体側に格納する・・・と言う二重構造になり
ます。
また可変と言う部分で、DMAバウンダリで大抵は、16バイト毎の
メモリ境界で境目にその文字列が重ならないような仕組みも必要
になります。また、OS自体のガーベージコレクションによる
メモリのページングや移動・スワップの関係もあります。

最大で512M欲しいと言うことは、最低でも1GBのメモリを搭載し
ないと、パフォーマンスの問題も出てきます。

一番の問題は、可変文字列部分の扱いのみです。
最大長を256バイト等に設定できれば、かなり簡単になります。

私が過去に製作して納品したものでは、50〜150MBのバッファ
をVirtualAlloc等で行えるようにしました。

これを焼直せば良いのですが・・・
6年ほど前に製作したもので、そのソースがどこにあるやら。
探し出せましたら、アップしますが・・・

以上。

編集 削除
岡田 之仁  2003-06-03 02:46:21  No: 78042  IP: [192.*.*.*]

一応、その折に参考にした書籍をお知らせしておきます。

ADVANCED WINDOWS (現在は、改訂第4版のようです)
http://bpstore.nikkeibp.co.jp/msp/book/38055/38055.html
本体価格9,500円+税  ISBN 4-7561-3805-5
第15章 アプリケーションでの仮想メモリの活用方法

私が使用したのは、初版(1995年)で、改訂第3版もありますが、
サンプルも含め、より最近のOS対応分の増加しているようです。

以上。ご参考までに・・・

編集 削除