格納できる マトリックス

 投稿者:与坂  昇平メール  投稿日:2009年 1月26日(月)10時22分43秒
  今日は
full  basic  で  有限要素法の 構造解析ソフトを  開発しています
C++ でも していますが
full  basic  は  グラヒックが  簡単で  c++ より  便利です
しかし
時間が  かかります

解析可能要素数は
3GRAM  で

full  basic  6000 要素
C++     12000 要素です


構造解析では  要素数  6000要素では
不足です
解析可能要素数  つまり
格納可能マトリツクス数を  増やすには
どうすればいいでしょうか ???

また
full  basic  は
64bit に  対応  していますか

是非
教えて下さい

よろしく
 

Re: 格納できる マトリックス

 投稿者:白石 和夫  投稿日:2009年 1月26日(月)17時40分30秒
  > No.252[元記事へ]

Full BASIC規格には,整数型の概念がありません。
規格の範囲では,32ビットの変数も64ビットの変数も使えません。
また,Full BASICには,配列の大きさに関する規定がありません。
規格上は,
DECLARE NUMERIC m(0 TO 10000000)
のような巨大な配列の宣言も許されます。
(仮称)十進BASICはメモリの使用効率がよくないので,
True BASICを試してみるとよいかも知れません。

(仮称)十進BASICの現在のバージョンのなかで最適化を図りたいのであれば,
ヘルプの言語使用の詳細の最後のページ「制限」に書いてある

★ 変数用管理用仮想メモリー
通常,変数管理用に割り当てる仮想メモリーは,実装物理メモリ容量から16Mバイトを減じた値(ただし,最小1Mバイト,最大512Mバイト)を上限とする。
なお,BASIC.INIにキーを追加することで直接指定することができる。

を参照して,BASIC.INIを書き換えてみてください。
なお,Win32アプリケーションのアドレス空間は2GBで,その一部に変数管理用メモリを割り当てるので,2048Mバイト以上を指定することはできませんし,2048MBより小さくても2048MBに近い数値を指定するとBASIC本体が正常に動作しません。
なお,2進モードの場合,配列は変数管理管理用メモリをほとんど消費しないので,変数管理用メモリの割り当てを減らすほうが効果的な可能性があります。

(注)BASIC.INIを使いたいときは,アーカイブ版をダウンロードし展開したものを使ってください。
(レジストリを使用する場合はレジストリの当該項目を修正することになります)

(参照)旧掲示板過去ログ
 

宣言可能な配列の大きさの上限

 投稿者:白石 和夫  投稿日:2009年 2月10日(火)11時28分54秒
  > No.252[元記事へ]

十進BASICが記憶領域として用いるメモリは大別してヒープとスタックの2種類があります。
スタックは,手続きの実行・終了にしたがって自動的に増減します。
ヒープは手続きの進行と非同期に確保・解放されます。
ヘルプの「言語使用の詳細」―「制限」の頁に記載されている「変数管理用メモリ」はスタックメモリに割り当てる領域です。

十進BASICは,
LET N=1000
DIM A(N)
のような拡張構文を許容するため,配列要素の実領域をヒープ上に確保します。
DIM B(1000)
のようにFull BASIC規格の範囲で宣言された配列はスタックメモリ上に確保できますが,
内部構造の複雑さを避けるためにどちらの形式の配列も配列要素はヒープ上に置いています。

配列を多用するプログラムを実行する場合には,変数管理用メモリを小さくとったほうが有利です。
しかし,ヒープから1回に取得できるメモリの大きさにはOS,開発言語および実行環境に由来する制限があります。
実装メモリ1GB(ビデオメモリを含む)のWindows XP機で,
BASIC.INIの[FRAME]セクションに
Virtualmemory=16
の記述を追加して実験すると,
10 OPTION ARITHMETIC NATIVE
20 DIM A(88000000)
30 END
程度が限界で,このプログラムを実行するとHDDへのスワップが発生します。
20行を A(90000000)に変えるとメモリ不足のエラーになります。
2進モードでは数値変数1個で8バイト占有するので,88000000個の変数は704MBに相当します。
なお,プログラムを実行すると,ヒープ領域のメモリの断片化が起こるので,プログラムの実行に成功したとき続けて要素数を増やしたプログラムを実行すると失敗する可能性が高くなります。成功した後の試行は,一旦,BASIC.EXEを終了・再起動後に行う必要があります。
また,このことは,プログラムの開発のために何度もプログラムの実行をくり返すような場面にもあてはまります。
 

戻る