.NET FrameworkとCommon Language Runtime (CLR)のアドバンテージのひとつは、開発者が基板となるハードウェアプラットフォームからが抽象化されていることによるベネフィットが得られることである。MicrosoftのCLRチームのプログラムマネージャであるAndrew Pardoe氏は先日、ARMアーキテクチャ上での実行を可能にするためのフレームワークのいくつかの変更について説明した。この動きは、64ビットコンピューティングへのスイッチよりも複雑で、Pardoe氏は違いを説明している。
Pardoe氏は、 Pardoe氏の見解によると、"....NET Frameworkはプラットフォームに依存しないように設計されているが、ほとんどがx86ベースのハードウェア上で実行されてきた"、結果としてARMで実行したい場合、開発者がいくつかのエリアで調査が必要になった:
- ウィークメモリモデル、ただしより厳密なデータアラインメントが必要
- 関数パラメータ処理の仕方の違い
- Visual Studio下におけるプロジェクト構成の詳細
x86アーキテクチャプロセッサは、"... 読み書きがプログラムが指定したのと同じ順に行われることが保証されている"メモリモデルに強く依存する。この保証は、マルチスレッドプログラムをシンプルにしてくれる。対してARMプロセッサは、編成中に再編成が行われこの保証がない。結果としてPardoeによると、x86ベースのマシンでしか実行したことがないコードは、既存のマルチスレッドコードにまだ検出されていないバグが潜んでいるかもしれないと話す。
CLRのパフォーマンスを検討事項は、MicrosoftがどれだけARMプロセッサのメモリモデルを強要するかにある。"タイプセーフを保証してマネージドヒープに書き込むときのキーポイントでのメモリバリアの[挿入]..."などいくつかの変更が行われており、最善の結果を得るためにPardoe氏は、適切な場所にvolatileキーワードを使うことをを推奨している。
CLRはほとんどの場合、データのアラインメントに気をつけているが、開発者はこれに影響を受ける場合がある:
"1つ目は、構造体のレイアウトにExplicitLayoutカスタム属性をつけて明示的に指定した場合です。2つ目は、マネージドとネイティブコードの間で誤って指定されたレイアウトの構造体が渡される場合です。"
最後にほとんどが開発者がCLRのターゲットを単純にセットすることができ、彼らのVisual StudioプロジェクトはAnyCPUをターゲットにすると、生成されたコードはARM、x86、x64と互換がある。