.NET開發者可以在Windows 8中使用ARM
作者 Jeff Martin 譯者姚琪琳
英文原文:ARMing .NET Developers for Windows 8
.NET Framework 和公共語言運行庫(CLR)的優勢之一就是,致力于此的開發者可以從它提供的基礎硬件平臺的抽象中獲益。最近,微軟 CLR 團隊的程序經理 Andrew Pardoe描述了針對此框架所做的一些更改,從而使它能運行在 ARM 架構上。此舉比切換到 64 位計算架構還要復雜,Pardoe 解釋了這些差異。
Pardoe 說道,“……盡管 .NET Framework 被設計為非特定平臺的,但它自誕生那天起主要運行在基于 x86 架構的硬件上”,因此要想在 ARM 架構上運行其代碼,開發者需要仔細研究以下幾個方面:
- 較弱的內存模型,只能帶來更嚴格的數據對齊(data alignment)要求。
- 對函數參數處理方式上的差異。
- Visual Studio 下項目配置信息的細節。 </ul>
基于 x86 架構的處理器依附于一種強內存模型,它可確保“……保證處理器在執行大多數讀寫操作時,其執行順序看起來與在程序中指定的順序相同”。這一點確保了對多線程編程的簡化。相比之下,在編排階段,ARM 架構的處理器在重組代碼時則無法保證這一點。據 Pardoe 說,最終的結果是,目前的多線程代碼很可能存在一些尚未發現的潛在缺陷,然而要是這些代碼只在基于 x86 架構的機器上運行的話,那么就不會出任何問題。
出于對 CLR 性能的考慮,使得微軟限制了運行庫在 ARM 架構處理器上強制實現強內存模型的程度。雖然做了一些更改,例如“在向托管堆寫數據時,會在一些關鍵點上插入內存屏障(memory barriers),從而確保類型安全……”,但是為了獲得最佳結果,Pardoe 建議開發者在適當的位置使用 volatile 關鍵字。
在大多數情況下,CLR 都能處理數據對齊,不過在有些情況下開發者也可以影響此行為:
第一種方法是,通過自定義特性 ExplicitLayout 來顯式指定某種結構的布局。第二種方法是,對于在托管代碼與本地代碼之間傳遞的結構不要準確指定其布局。
最后,大多數面向 CLR 的開發者都可以將他們的 Visual Studio 項目設置為面向 AnyCPU,因此得到的代碼會同時兼容 ARM、x86、及 x64 三種架構。