No.1
- 回答日時:
とりあえず、PGが動いていない状態のメモリ量はいくつか教えていただけると助かります。
EMSを使う方法、DOSエクステンダに頼る方法など、いくつか思いつきますが、いずれもクセがあり、簡単ではないです。
まず、思ったのが、デバイスドライバの調整でUMB/HMAを駆使してDOSメモリ領域をできるだけ大きく取る努力をしたほうが良いのでは?ということでした。
この回答への補足
難しそうなのですね・・・。
ちなみにMS-Cは、Ver.6.0Aを使用しています。
下記は、「MEM」をリダイレクションしたものです。
メモリの種類 合計 = 使用 + 空き
---------------- -------- -------- --------
コンベンショナル 640K 146K 494K
アッパー メモリ 78K 41K 37K
予約済み 384K 384K 0K
XMS メモリ 14,258K 2,677K 11,581K
---------------- -------- -------- --------
全メモリ 15,360K 3,248K 12,112K
全 1MB 以下メモリ 718K 187K 531K
全 EMS メモリ 14,272K (14,614,528 バイト)
空き EMS メモリ 11,696K (11,976,704 バイト)
最大実行可能プログラムサイズ 493K (505,312 バイト)
最大空きアッパーメモリブロック 19K (19,344 バイト)
MS-DOS はハイメモリ領域に常駐しています.
No.2
- 回答日時:
こんにちは、honiyonです。
HIMEMを使うのも手ですが、基本はやっぱりプログラムスリム化です。
○無駄な処理を省く
汎用的に作ってある関数があり、一定の用途にしか使っていない場合は
その用途に特化し、処理をスリム化する。
○無駄なデータは即破棄
無駄に mallocして使いもしてないメモリは、使用後即freeする。
○無駄に大きい変数を消す
255まで使いもしないのに intやlongで確保しているものは smallint
に定義し直す。
○無駄な関数呼出は回避する。
繰り返し使うものでもないのに(多分汎用性を重視して)関数化してあ
るものを、直接本処理に組み込んでしまう。
○いざとなればアセンブラ
メモリ効率の悪そうな処理を、アセンブラで効率の良い処理を記述する。
(最近コンパイラ頭良いから逆に非効率になるかも?)
あと、データをテンポラリファイルを作って、ファイルに吐き出すのも手ですね。 で、必要になったら読み込んで来る。 スワップファイルの要領です。
とりあえずアドバイスでした。
参考になれば幸いです(..
確かにおっしゃる通りです。非常に効率の悪い作りをしてあります。
ただ今回は、早急な対応だったためハードディスクに逃がす方法をとりました。
いろいろアドバイスをいただきましてありがとうございました。こいつは、気合を入れてスリムにしていきたいと思っています。
No.3
- 回答日時:
基本的にはコンベンショナルメモリしかmallocの対象になりません。
解決策としては
(1)DOSエクステンダによりプロテクトメモリを使用する。
もうどこもサポートしていないでしょうね。
(2)mallocで使用している部分をHDDにとるように書き換える。
プログラムにもよりますが、配列に格納できるようなデータであれば、メモリ取得ルーチンをディスクに対して行えるようなdalloc関数を作成するのも有効です。
(3)プログラムを分割する。
オーバーレイするように設計しなおし、コンベンショナルエリアを空ける。
ただし、分割設計によってはまったく意味がないこともあります。
早急な対応だったため、今回はハードディスクに逃がす方法をとりました。
いろいろアドバイスをいただきましてありがとうございました。メモリに関しては、じっくり考えていきたいと思っています。わからないことがまた出てきたらよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
私「愛用」のMS-Cはversion7.0Aですので
バージョンが違ってたらお役に立てないかもしれませんが
ご了承下さい
----
メモリが足らないとの事ですが
私の思いついた解決方法は2つあります
----
「1:メモリモデルの変更」
ご存知でしたら読み飛ばして下さい
MS-DOS…というよりMS-Cは
6種類のメモリモデルと呼ばれるものがあります
詳しい説明は省かせて頂きますが
簡単に言えば(デフォルトの)データのアドレッシングを
16ビット・32ビットのどちらで行うかという事です
通常は最小サイズのスモールメモリモデルが適用されます
この場合(デフォルトの)データの参照は
16ビットですので malloc で利用できるメモリは
64キロバイト以下に制限されます
これじゃちっちゃすぎますよね!
そこでメモリモデルをより大きいものに変更します
ミドルメモリモデル・ヒュージメモリモデルの2つが
候補として考えられますが
ここは確実性の為に最大のヒュージメモリモデルにします
方法としては CL コマンドラインオプションに
/AH を追加して下さい
これでデータの参照は32ビットで利用できますから
利用できるデータサイズはかなり大きくなります
因みにポインタのサイズが変わるので
不具合が発生しない様に注意が必要ですが…
また
メモリモデルを変更せずにもデフォルトセグメントを
越えてアクセスは可能でして…
動的配置に malloc ではなく
_fmalloc や _halloc を利用するのですが
詳しくはマニュアルでお願いします…
----
「2:拡張メモリ等を使用」
あとはおっしゃる通り拡張メモリ等を使用する方法ですね
バージョン7.0Aではサポートされているのですが
実はランタイムライブラリの中に
仮想メモリを扱ってくれるモジュールが有って
関数は _vheapinit _vheapterm _vmalloc _vfree ...
といった感じでまだまだ有ります
これは仮想メモリ初期化の _vheapinit 関数の引数で
拡張メモリ・EMSメモリを利用するか
ディスクにスワップするか指定出来ますから
全部適用しておけばメモリ不足なんて消え去ります
----
てな感じでどうでしょうか
それではおやすみなさい(←?)
MS-C Ver.6を使用しておりましたので拡張メモリのサポートは、ありませんでした。今回はハードディスクに逃がす方法をとりました。
いろいろアドバイスをいただきましてありがとうございました。メモリに関しては、じっくり考えていきたいと思っています。わからないことがまた出てきたらよろしくお願いいたします。
No.5
- 回答日時:
アッパーメモリの空きが37kですか。
config.sysで登録しているものの中でdevice=と指定されているものをdevicehigh=と書き換えてみるとか、autoexec.batの中で常駐ソフトをloadhighとかしてアッパーメモリに逃がすというアイデアではあまり救えなそうですね。
今更の質問ですみませんが、mallocで取得したいと思うメモリのサイズを教えていただけないでしょうか?mallocがうまくいかないためにEMSを使用するというのは、あまり良いアイデアとは思えないもので...。
一応EMSに関わる説明のページをお知らせしておきますけれど、理解しにくいようなら補足しますので。
参考URL:http://www2.muroran-it.ac.jp/circle/mpc/pc98dos/ …
早急な対応だったため、今回はハードディスクに逃がす方法をとりました。
いろいろアドバイスをいただきましてありがとうございました。メモリに関しては、じっくり考えていきたいと思っています。わからないことがまた出てきたらよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 7 Windows7でMicrosoft VirtualPC2007 SP1を使用する 9 2022/11/17 13:12
- CPU・メモリ・マザーボード 質問お願いします 「「RAM2GB+拡張4GB」などと書いてあるのは、搭載されているメモリ(RAM) 6 2023/08/28 12:31
- CPU・メモリ・マザーボード 「コンピューターのメモリが不足しています」と表示される2 7 2022/12/14 17:46
- CPU・メモリ・マザーボード Windows10 64bitパソコンのメモリ 4GBから8GBへ増設 11 2023/01/25 18:20
- ドライブ・ストレージ 最近、外付けSSDというのが出回ってますが、USBメモリと比較してどっちが安い?どっちが高性能? 6 2022/04/23 10:51
- CPU・メモリ・マザーボード 【PCメモリ増設】メーカーによって相性は違うのでしょうか? 9 2023/08/25 21:37
- CPU・メモリ・マザーボード ゲーミングpcのファンのことについて教えて欲しいです。 6 2023/03/05 07:44
- iPhone(アイフォーン) iCloudのデータをiPhoneメモリに移動したい 1 2022/10/24 22:11
- CPU・メモリ・マザーボード hp dc5700SFFについて 2 2022/06/03 10:50
- Windows 10 VirtualBox からWindows XP を起動すると画面が真っ暗になってしまいました 4 2023/07/09 16:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
メモリアロケーション異常の発...
-
C#で別クラスインスタンスのメ...
-
大容量のメモリ確保をスワップ...
-
エクセル キャッシュメモリー...
-
メモリのセグメント違反の解決...
-
ちなみに、for (i = 0; str[i] ...
-
ReadEventLogについて
-
FindFirstFile ハンドル開放
-
大量件数のINSERT or UPDATE を...
-
動的メモリとexit(C言語)
-
パソコンを閉じる時いつも休止...
-
メモリの増加に関して
-
メモリの消費量について
-
スーパーマリオのパワーアップ...
-
CFileのOpenで例外(998:メモ...
-
「memcpy」と「strcpy」について
-
C言語:関数のメモリ上でのサイ...
-
アプリケーション上の文字を画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
VBAの配列サイズとメモリに関して
-
「ヒープサイズの設定」て何?
-
C言語における再帰呼び出しの...
-
エクセルVBA 大容量CSVファイル...
-
動的メモリとexit(C言語)
-
エクセルのメモリ使用状況/Appl...
-
メモリが不足しています(VBA)
-
ファイルマッピング関数で失敗
-
大容量のメモリ確保をスワップ...
-
メモリのセグメント違反の解決...
-
EXCEL-VBAにてADOのレコードセ...
-
メモリ不足
-
エクセル キャッシュメモリー...
-
【C言語】再帰が時間がかかる...
-
C#のOutOfMemoryException発生...
-
closeとメモリの開放について
-
バッチファイルでの実行EXEのメ...
-
メモリの解放について VB6 VBA
-
「memcpy」と「strcpy」について
おすすめ情報