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のメモリマップによく似ているからです。例えば:
- ユーザ空間を32MB単位の空間に分断して、それを一つのCPU命令で切り替えることができる
- 物理メモリに固定マップされた、キャッシュ・アンキャッシュ可能なカーネル空間を持っている
といったところが、MIPSのアーキテクチャによく似ているのです。
Windows CEに使われているCPUはWindows PCのCPUより非力なので、メモリ管理もWindowsより簡略化し、パフォーマンスを確保したかったのではないでしょうか。
(3/3 追記)
ウソでした。StackもHeapもDLLも32MB空間の中ですね。