本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[XL]「メモリ不足」について、その原因確認方法と対策

文書番号: 402556

最終更新日: 2002/01/08


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP402556

概要

「メモリが足りないのでこの処理を最後まで実行できません」、「メモリ不足のためこ のアプリケーションを実行できません」というエラーが出ることがあります。この場 合のメモリは、パソコン本体のメモリのことを指すのですが、Microsoft(R) MS-DOS
(R) (以下 MS-DOS) の環境と異なり、その内容は複雑で多岐にわたっています。エラ ー メッセージにはその対策として、起動中の他のアプリケーションを終了させて
処理を継続して欲しいという回避方法が表示されますが、この情報だけでは不満な
方もいらっしゃるでしょう。また、これでは対処できないケースもまれにはありま
す。
本文書では、Excel 5.0 を Microsoft(R) Windows(R) Version 3.1 (以下 Windows
3.1、もしくはバージョンに関りがないときには単に Windows) 上で使用するに
あたり直面するこのメモリ不足のエラーが指す意味を説明し、原因の確認方法と
その対策を紹介するものです。

1. メモリ不足のエラーが発生する主な原因

ここでは、メモリ不足のエラーが発生する原因となるものを順を追って概要を解説し ていきます。

(1) XMS メモリの不足

XMS メモリの XMS とは Extended Memory Specification の略で、i80386 以上の CPU が持つ (エンハンスド モードでは) 4GB までのメモリを管理する規格です。Windows や MS-DOS の最新版では HIMEM.SYS という XMS ドライバ (XMM: Extended Memory
Manager) がこれを実現しています。Windows はこの HIMEM.SYS から必要なメモリ
を貰って、アプリケーションに使わせています。ここで言う「 XMS メモリ」は XMM
が管理するメモリ (仮想メモリも含む) です。
Windows 3.1 をエンハンスド モードで起動している場合には、実際に使用可能な物理 メモリの 4 倍までの仮想メモリが使用できます。仮想メモリは、ハードディスクの一 部をメモリの代わりとして使用し、実際に搭載されている物理的なメモリよりも多く を使用できるようにしたメモリのことです。この設定は、Windows 3.1 に添付のツー ル「コントロール パネル」にある「エンハンスド モード」で行えます。そして、
その結果使用可能なメモリは、「プログラム マネージャ」の [ヘルプ] - [バージ
ョン情報] コマンドで確認することができます。このコマンドを実行すると、ダイ
アログ ボックスが現れますが、その下部に現在の Windows のモードが表示され、
その下に「メモリ: xxxxxx 使用可能」と表示される数字です。
ただし、スタンダード モードで使用される場合には仮想メモリが使用できません。
実際に実相されている物理メモリのみしか使用できないのですが、このモードは
i80286 用 (16 ビット CPU) のモードですので、物理メモリも最大 16MB までしか
使用できません。

確認方法

これらは「プログラム マネージャ」の [ヘルプ] - [バージョン情報] コマンドを実行 するとバージョンの情報とともに、使用可能残りメモリの容量が「メモリ」という項 目として表示されます。メモリ不足のエラーが出た状態で、このコマンドを実行させ てみてください。1MB も無い場合には注意をしてください。また、エンハンスドモー ドで Windows 3.1 を利用しているときに、スワップ ファイルの設定を一時にしてい る場合には、ディスクの容量不足ということも考えられます。「コントロール パネ
ル」から「エンハンスドモード」を選択し、<スワップ ファイルの設定> ボタンを 押して、スワップ ファイルの状態と作成ドライブを確認してください。その後、
そのドライブのディスク空き領域が十分かどうか「ファイル マネージャ」で確認
してください。

対応策

同時に起動させているアプリケーションの数を減らすことで対処できます。しかし、ど うしても複数のアプリケーションを同時に起動させ作業させたい場合には以下の方法 を取ります。標準モードでは 16MB の範囲まで物理的にメモリを増やします。これも 不足する場合にはエンハンスド モードで使用するしかありません。もし、お使いの
パーソナル コンピュータが 32 ビット CPU を持っていない場合には 32 ビットの CPU を持つパーソナル コンピュータをご用意いただく必要があります。エンハンスド
モードの時には、物理的にメモリを増やす他にも、仮想メモリを増やす方法があり
ます。これは「コントロール パネル」の「エンハンスド モード」の項目で設定で
きます。詳しくは Windows のマニュアルを参照してください。ただし、物理的にメ
モリを増やすよりは速度が遅くなります。

(2) システム リソース空き領域の不足

システム リソース領域とは、すべての Windows アプリケーションに共通の「リソ
ース」を操作するための特別なメモリで、Windows のシステムが管理するメモリで
す。「リソース」には、メニュー、アイコン、カーソル、ウィンドウなどのユーザ
ー インターフェイスに関るものと、ディスプレイやプリンタ デバイスに対して文
字や図形を描画するために使用されるものの 2 つがあります。前者は USER.EXE、
後者は GDI.EXE というファイル名の Windows のシステム、DLL (ダイナミック リン
ク ライブラリ) によって分けて管理されています。この領域は XMS メモリから確
保されるものですが、その大きさは固定で、本体の実メモリをいくら増設しても増
えることはありません。これは Windows 3.1 が 16 ビット CPU である i80286 も
サポートする 16 ビット OS である制限からくるもので、増やす方法はありませ
ん。この領域の大きさは Microsoft(R) Windows (R) Version 3.0 (以下 Windows
3.0) と Windows 3.1 では、若干状況が異なります。Windows 3.0 では先程説明
した USER.EXE と GDI.EXE が管理するリソースは総てそれぞれ 64KB です。しか
し、Windows 3.1 では、USER.EXE が管理するリソースの内、メニューだけを別の
64KB の領域を用意しています。この結果、Windows 3.0 では最大 64KB であったの
に対し、Windows 3.1 では最大 128KB + 64KB になっています。残りの領域を確認
するには、前項の XMS メモリと同様に「プログラム マネージャ」の [ヘルプ] -
[バージョン情報] コマンドで行えます。「メモリ:」の下にある「システムリソー
ス: xx % 使用可能」という数字がこれにあたります。このコマンドでは、USER.EXE
か GDI.EXE のどちらかが不足しているかわかりません。このコマンドが表示する数字 は、USER.EXE か GDI.EXE のシステム リソース領域の内、少ない方の数字になりま
す。どちらが問題となっているのか知りたいときには、パソコン通信などで配布され ているツールを使う方法があります。また、エラーを起こす前の状態であれば、
Excel 5.0 の [?] - [バージョン情報] コマンドで表示されるダイアログ ボッ
クス内の <システム情報> ボタンでそれぞれを知ることができます。
この数字は、多ければ多いほど良いのですが、可能であれば 40% 以上空いている
状態でアプリケーションを使用されることをお勧めします。アプリケーションに
よっては、瞬間的にでも大量のリソースを使用することがあるからです。
また、環境 (特に ディスプレイ ドライバ) によっては、本来よりもメモリ不足を起こ しやすいことがあります。特に DOS/V パーソナル コンピュータで、高い解像度を使 用している方は注意する必要があるかもしれません。

確認方法

これらは「プログラム マネージャ」の [ヘルプ] - [バージョン情報] コマンドを実行 するとバージョンの情報とともに、使用可能残りシステム リソース領域が % で表示 されます。通常 40% 以上での使用をお薦めしますが、20% 以下であると、描画の際
に一時的にメモリを消費することがありますので、注意してください。ディスプレイ ドライバ関連の問題を確認する場合には、最もベーシックなディスプレイ モード、
DOS/V パーソナル コンピュータの場合には BASIC VGA モード (640 × 480、16 色
同時発色) のモードで試してみてください。PC-9801 シリーズの場合にはハードウ
ェアに標準のノーマル モードで確認してください。これらのテストの結果問題が
無い場合には、パーソナルコンピュータのメーカーかディスプレイ アダプタおよ
びディスプレイ ドライバを供給しているメーカーのサポートに現象について問い
合わせてみてください。新しいドライバが用意されているかもしれません。

対応策

システム リソースの大きさの制限は、Intel の CPU のアーキテクチャによるもの
です。i386 以上の CPU にターゲットを絞った 32 ビット OS とそれに対応するア
プリケーションになったときまで根本的な解決はできません。ただし、システム リ
ソースを消費を押さえるように使う側で工夫することはできます。
  1. 同時に起動しているアプリケーションの数を減らす
  2. 同時にオープンするワークシートの数を減らす
  3. チャートやグラフィック オブジェクト、ボタンなどの数を減らす
  4. 画面に表示する領域を小さくする

(3) ディスクリプタ テーブルの不足

i80286 以上の CPU には、MS-DOS が管理できる 1MB 以上のメモリを管理する能力が あります。このため CPU には MS-DOS が使用しているリアル モードの他にプロテク トモードとか仮想 86 モードというモードを備えています。これらのモードは同時に 複数のアプリケーションを実行させることが前提となっており、あるアプリケーショ ンが他のアプリケーションの使用しているデータを破壊しないような工夫がされて
います。プロテクト モードの「プロテクト (保護) 」とは、この仕組みを指してい
ます。 また、複数のアプリケーションを同時に動作させようとすると、メモリ
の使い方に工夫が必要になります。時によってはメモリのブロックを移動させた
り、仮想メモリで使用するように、ディスクとの間でスワップしなければならな
いでしょう。これらの作業をソフトウェアだけで行うのは時間的に大きな代償が
必要となります。そこでこれらをサポートする機能が CPU には用意されていま
す。その機能は、ソフトウェアがメモリをアドレスするときに、直接メモリをア
ドレスするのではなく、セグメント ディスクリプタ テーブルと呼ばれるテーブル
をアクセスします。このテーブルはメモリの特定の場所に置かれ、その中に、実際
のメモリのアドレスが格納されているのです。CPU はこの中身を変えることでメモ
リを保護したり、ブロックの移動/調整を行ったりできるのです。 ただ、このテ
ーブルは無限ではありません。また、Windows 自身やアプリケーションは、同時に
いくつものテーブルを使用します。ディスクリプタ テーブルは大きく 2 つに分け
られます。環境全体で使用されるグローバルディスクリプタ テーブルと、アプリ
ケーション毎に用意されるローカル ディスクリプタ テーブルというセレクタを格
納するテーブルです。各テーブルは 8K 個 (8192) しか持てません。メモリ ブロッ
ク毎にこのテーブルを 1 つ消費してしまいます。このためテーブルを使いきったと
き、メモリ不足として処理されることになります。

確認方法

それぞれのディスクリプタ テーブルの使用状況を見るのは困難です。アプリケーショ ンの作り方次第で、そのアプリケーションの規模には関係が無く使用されます。ディ スクリプタ テーブルがオーバー フローを起こすことは、現実には大変に少ないこ
とでしょう。これはアプリケーションの設計者が考慮に入れることができる範囲
だからです。オーバーフローを起こすようなことが想定されていれば、あらかじ
めアプリケーション側で (マニュアルなどで) 制限を課しているでしょう。

対応策

同時に動作しているアプリケーションの数を減らしたり、同時にオープンしているワー クシートおよびそれに含まれる行数を減らすしかありません。これが影響するのは大 規模なデータベースを作られているときだと思います。このような時には、Microsoft Access(R) でデータの加工、抽出を行った後、Excel 5.0 に持ってくるなどのアプリ ケーションのコンビネーションで解決するのが良いでしょう。
APPNOTE NO: 402556

Keywords: KBHOWTO KB402556
Technology: kbExcel500 kbExcelSearch kbExcelWinSearch

inserted by FC2 system