6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS メモリについて

Last updated at Posted at 2018-07-31

#はじめに
Apple Documentの「メモリ効率の向上に 関するガイドライン」を少しづつまとめて見ようと思いこの記事を書きました。
認識間違いなどありましたら、教えていただけると嬉しいです。

#序章 仮想メモリについて
仮想メモリはOSXとiOSとも、4GBあります。
仮想メモリは、物理的なRAMの容量に制限されることなく、オペレーティングシステムが稼働するための仕組みで、仮想アドレス空間を各プロセスに割り当てて、割り当てられた空間を一定の大きさ(4KB)に分割して管理します。この分割された空間をページと言います。

プロセッサ(CPU?)とメモリ管理ユニット(システム? 以降MMU)はページ表を管理し、プログラムの仮想アドレス空間上のページをメインメモリのアドレスに対応づけます。

そして、僕たちが買いたコードがメモリ上にあるアドレスにアクセスしようとすると、MMUはページ表を参照して、仮想アドレスを物理アドレスに変換します。

#iOSのメモリ管理について

iOSはメモリが枯渇しそうになると、ディスク上に存在し書き換えることのないデータ(コードページなど)は、単純にメモリから消去し、必要になった時点で再び読み込むようになっています。
それでもメモリ領域が足りない場合は、システムがアプリケーションにその旨を通知し、メモリを解放して空きを確保するよう要求します。applicationDidReceiveMemoryWarningとかね
この要求に応じられなかった場合、アプリ自体を停止してしまいます。

おまけ
OSXの場合はメモリが枯渇しそうになると、ハードディスクに使用しないデータを保持させます。そのためのハードディスク上の領域をバッキングストアと呼びます。OSXにしかこの機能は備わっていません。

#アドレスがメインメモリになかった場合
アクセスしようとしたアドレスがメインメモリに無く、ハードディスクに存在する場合は、ページフォールトという割り込み処理が発生し、ページングと呼ばれる処理が行われます。

ページングは仮想メモリシステムは専用のハンドラを起動し、実行中のコードを停止して、メインメモリの空きページを見つけた後に、必要なデータを含むページをハードディスクから読み込み、ページ表を更新してから処理を再開します。

注意
頻繁にページフォールトが発生すると、ページの読み書きも頻繁に起きるので、実行中のコードよりも時間がかかります。これをディスクラッシングと呼びます。

#メモリ領域が無い場合のiOSの挙動
もしメインメモリ上に空きページがない場合は他の使用しないページを解放して、新しいページ用の空間を確保しないといけません。
iOSにはバッキングストアの機能がないので、メインメモリから使わないメモリを退避する(これをページアウトと呼びます。)ことができません。

しかし読み込み専用のページは、必要に応じてハードディスクから物理メモリにページを移動する(これをページインと呼びます)ことはできます。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?