メモリ不足時の挙動まとめ
言語
C
- malloc()がNULLポインタを返す
Java
- OutOfMemoryException例外が投げられる
C#
- OutOfMemoryException例外が投げられる
JavaScript
- 未定義?
メモリ不足時の対処
- メモリ不足時にはアプリを落とす、世の中の大半のアプリ
- NULLが返る場合: 意図しない処理が実行されるのが問題。対策として、多くのコードにNULLチェックを入れるより、malloc()をラップしてNULLの場合にexit()するのがいい(OSがアプリ削除時に確保した領域を開放しないようなプラットホームは別)。
- 例外を投げる場合: アプリは気にしないか、最上位でcatchして自分を終了する。
- メモリ不足時に縮小運転などを行うアプリ(可能ならば下位でチェックするのではなく、上位で残存メモリ量を見て縮小運転に移行するのがいい)
- NULLが返る場合: NULLチェックを全ての場所に入れて、整合性を保つための処理を行い、NULL(実際はメモリエラー用の返り値の場合が多い)を上に伝搬させていく。
- 例外を投げる場合: 整合性を保つ必要のある場所全てで、OutOfMemoryExceptionをcatchして、処理を行い、伝搬させるのためOutOfMemoryExceptionを投げる。