プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

W-ZERO3: Windows Mobileのアプリ数の制限


伊藤浩一さん、ブログで拙作TinyPadを紹介いただき、ありがとうございます。


さて、この話ですが:

★32個までなんですね。


これは以下のサイトに説明が書いてあります。Windows Mobile 5.0のベースとなっている、Windows CE 5.0のメモリ管理の説明です。


http://msdn.microsoft.com/library/en-us/wcecoreos5/html/wce50conMemoryArchitecture.asp

When Windows CE OS starts, it creates a single 4-gigabyte (GB) virtual address space. The address space is divided into 33 slots, and each slot is 32 megabytes (MB). All the processes share the address space. When a process starts, Windows CE selects an open slot for the process in the address space of the system. Slot zero is reserved for the currently running process.


上記サイトの後ろにある図を見るとよく分かると思います。厳密には31個ですね。一つのProcess空間は32MBまでですが、これにはスタックやヒープ、共有メモリ空間などは含まれないので、よほど大きなアプリを作らない限りは困らないでしょう。


(ここからは私の推測です)


なぜこのような構造になっているのか、本当の理由は分かりませんが、Windows CE OSの設計にはMIPS CPUが大きく関わっていると予想しています。それはCEのメモリマップがMIPSのメモリマップによく似ているからです。例えば:

  1. ユーザ空間を32MB単位の空間に分断して、それを一つのCPU命令で切り替えることができる
  2. 物理メモリに固定マップされた、キャッシュ・アンキャッシュ可能なカーネル空間を持っている

といったところが、MIPSアーキテクチャによく似ているのです。


Windows CEに使われているCPUはWindows PCのCPUより非力なので、メモリ管理もWindowsより簡略化し、パフォーマンスを確保したかったのではないでしょうか。


(3/3 追記)


ウソでした。StackもHeapもDLLも32MB空間の中ですね。