例外処理 回復処理

例外処理

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/08/17 05:32 UTC 版)

回復処理

記憶領域の枯渇

処理中に使用可能な記憶領域が枯渇した場合の回復は比較的単純である。

  1. 大量データを読み込もうとした
  2. システム全体の短期的な記憶領域枯渇
  3. システム全体の長期的な記憶領域枯渇

記憶領域が原因として上記が考えられるがGUIプログラムのイベント処理であれば3以外の状況から回復できる。1,2どちらも現在実行中の処理を中断して処理に使った記憶領域を解放すればプロセスを継続できる可能性がある。特に2の状況であればシステムの記憶領域使用状況が回復を待って再度同じ処理を実行することができる。

CUIの場合でかつ複数のファイルを処理しているような場合1の状況から回復することができる。枯渇が発生した大容量ファイルの処理は無理でもその後の小容量ファイルは処理できる可能性がある。

次にSmalltalkによる回復処理の例を示す:

| window textBox filePath open notifyArea |

"ファイルの読み込み失敗を通知する部品"
notifyArea := LabelStringMorph new.

"ファイルを開くための部品"
textBox := TextMorph new.
filePath := TextMorph new.
open := SimpleButtonMorph new.

"ボタンをクリックしたらファイルを読み込んでテキストボックスに表示できるようにする"
open
	on:     #click
	send:   #value
	to:
    [
    	[
    		filePath contents asFile withReadStreamDo:
    		[ :readStream |
    			textBox contents: readStream contents.
    		]
    	]
    		"
    		記憶領域が枯渇した場合の回復処理。
    		処理を中断した上、できるだけ資源を解放したのち使用者に記憶領域の解放を促す。
    		例外が発生してから例外を捕捉するまでに幾分かの記憶領域が解放される、
    		解放後ゆとりができていれば回復できるが、ゆとりが無い場合は回復できなくなる場合もある。
    		"
    		on: AllocationFailure
    		do:
    		[
    			ObjectMemory compact.  "ガーベッジコレクターによる解放"
    			textBox contents: ''. "途中まで読み込んでしまった文字列を解放"
    			ObjectMemory compact.  "textBox contents分の解放"
    			notifyArea text: '記憶領域が枯渇しているためファイルを開けませんでした。他のプログラムを終了してから再度実行して下さい。'
    		].
    ].

"ファイルを表示するテキストボックスとファイルの読み込みに必要な各種部品を組み込んだWindowを表示する"
window := SystemWindow new.
window
	addMorph: textBox;
	addMorph: filePath;
	addMorph: open;
	addMorph: notifyArea;
	openInWorld.

  1. ^ a b 第 5 章 例外処理 (C++ プログラミングガイド)”. docs.oracle.com. 2019年10月26日閲覧。
  2. ^ a b IPA ISEC セキュア・プログラミング講座:C/C++言語編 第6章 フェイルセーフ:体系だてたエラーハンドリング”. www.ipa.go.jp. 2019年10月26日閲覧。
  3. ^ a b エラー処理をパターンにはめよう”. Codezine. 2019年10月26日閲覧。
  4. ^ Bjarne Stroustrup. “Appendix E: Standard-Library Exception Safety in "The C++ Programming Language" (3rd Edition).Addison-Wesley, ISBN 0-201-88954-4”. 2013年5月1日閲覧。
  5. ^ Exception-Safety in Generic Components”. 2013年5月1日閲覧。
  6. ^ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.asc
  7. ^ /EH (例外処理モデル)
  8. ^ ただし、例外処理中にもう一度別のデストラクタから例外が発生してしまうと復帰できなくなるため、デストラクタから例外を発生させるべきではないとされる。
  9. ^ 例外指定は、 C++関数によって伝達される例外の種類についてプログラマが意図したものを示す言語機能です。 Microsoft Docs Visual C++
  10. ^ C++17ではこの動的例外仕様が削除される。C++日本語リファレンス
  11. ^ class StopIteration Ruby 1.9.3 リファレンスマニュアル(2013年10月7日閲覧)。
  12. ^ 組み込み例外 Python 2.7ドキュメンテーション(2013年10月7日閲覧)。
  13. ^ module function Kernel.#throw Ruby 1.9.2 リファレンスマニュアル(2013年10月7日閲覧)。
  14. ^ たとえばCOMではメソッドの戻り値として、MAKE_HRESULT()マクロを用いてHRESULTコードを定義するが、異常系は負数となる。
  15. ^ CUDAのように列挙型で定義した正の数をエラーコードとして使用するライブラリもある。CUDA Runtime API :: CUDA Toolkit Documentation
  16. ^ GetFileSize 関数
  17. ^ GetFileSize function (Windows)
  18. ^ C言語規格のドラフト”. 2018年11月21日閲覧。





英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「例外処理」の関連用語

例外処理のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



例外処理のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの例外処理 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS