VB初心者です。
プログラム上で、仮想メモリとして512MのByte領域を取りたいのですが
VBでは、単純に Public または Dim で宣言すればいいだけなのでしょうか?
色々自分なりに調べてみたのですが、どうしていいのか分かりません。
もし、仮想メモリとして確保する方法があるのでしたら
現在使用できるメモリの取得なども可能なのでしょうか?
質問がトンチンカンかもしれませんが、よろしくお願い致します。
私が実現した方法では・・・
Virtual で始まる、Win32 API を探して内容を確認して下さい。
Global で始まる、Win32 APIでは、実メモリを確保・解放する
ことになり、搭載メモリ上限までしかアクセスできません。
VirtualAlloc等、Virtualで始まるAPIは、仮想記憶領域からメモリ
をマップしますので、スワップファイルの設定にもよりますが、実
メモリ以上の容量を取得することが可能です。しかしながら、実メモ
リ領域より大きなエリアをマップしたら、スワップファイルのアクセ
スが発生し、かなりパフォーマンスに影響が出ます。
が、Virtual関係のAPIでは、そのパフォーマンス劣化を少なからず
とも抑えるコーディング方法がありますので、頑張って調べてみて
下さい。
因みに、OSは?
OSによって、APIの処理に有する時間が全く違います。
それはOSの仮想メモリへのアクセス方法が違う為ですが・・・
尚、VBでおこなわれるのであれば、メモリ関係は、ActiveXにして
C言語(やC++)で作成するのが好ましいです。
以上。
岡田様 ありがとうございます。
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フレームずつ画面に表示する。
ホントに申し訳ありません。
もしお時間ある様でしたら教えてください。
本やネット等でも調べているのですが、書いてある言葉自体が難しくて
なかなか理解に苦しんでいます。
ヨロシクお願い致します。
まず・・・
構造体に宣言されている項目で、可変長の文字列がありますネ!
これを実現させるには、なかなか骨です・・・
C言語で言いますと、可変文字列の長さ分を別アドレスを取得し
そのポインタを構造体側に格納する・・・と言う二重構造になり
ます。
また可変と言う部分で、DMAバウンダリで大抵は、16バイト毎の
メモリ境界で境目にその文字列が重ならないような仕組みも必要
になります。また、OS自体のガーベージコレクションによる
メモリのページングや移動・スワップの関係もあります。
最大で512M欲しいと言うことは、最低でも1GBのメモリを搭載し
ないと、パフォーマンスの問題も出てきます。
一番の問題は、可変文字列部分の扱いのみです。
最大長を256バイト等に設定できれば、かなり簡単になります。
私が過去に製作して納品したものでは、50〜150MBのバッファ
をVirtualAlloc等で行えるようにしました。
これを焼直せば良いのですが・・・
6年ほど前に製作したもので、そのソースがどこにあるやら。
探し出せましたら、アップしますが・・・
以上。
一応、その折に参考にした書籍をお知らせしておきます。
ADVANCED WINDOWS (現在は、改訂第4版のようです)
http://bpstore.nikkeibp.co.jp/msp/book/38055/38055.html
本体価格9,500円+税 ISBN 4-7561-3805-5
第15章 アプリケーションでの仮想メモリの活用方法
私が使用したのは、初版(1995年)で、改訂第3版もありますが、
サンプルも含め、より最近のOS対応分の増加しているようです。
以上。ご参考までに・・・
ツイート | ![]() |