再談CLR 目標平台的問題

2021-05-23 08:46:17 字數 1217 閱讀 3270

曾經有朋友問到這樣的乙個問題:我要開發乙個能執行在64位機器上的應用程式,是不是應該使用visual studio 的64位版本來做?

這是乙個似是而非的問題,首先其實visual studio 並沒有所謂的64位版本;然後,其實預設情況下,visual studio所編譯出來的應用程式就是可以既執行在32位平台,也可以執行在64位平台。

這是為什麼呢?我們來看一下預設情況下visual studio編譯的選項

我們可以看到這裡的「目標平台」設定為「any cpu」,這就意味著編譯出來的程式集將既可以在x86(也就是32位)上執行,也可以在x64(也就是64位)上執行,甚至它還可以在itanium(安騰)上面執行

很顯然,這種方式是最簡單方便的,我想甚至很多開發人員(注意,這裡我沒有用程式設計師)都不知道這個選項以及它的意思呢。

雖然預設的選項是很方便和有用的 ,但是在某些時候,我們可能希望按照特定平台(例如64位)進行編譯,尤其是我們會用到不安全**(unsafe),或者說我們需要用到較多的com interop,p-invoke等等。

我們可以看到目標平台這個選項其實是有四個的

下面這個**列出了他們分別代表的含義

需要注意的是,如果你編譯了x64的版本(這個操作並不要求你的作業系統本身是x64的),你仍然無法直接在x86的平台上執行它

也就是說,其實針對不同平台編譯出來的pe檔案,它的pe header是不一樣的。32位平台就是pe 32,而64位平台就是pe 32+

乙個題外話,原先在.net framework 1.x時代,雖然也可以編譯出anycpu的應用程式,但其實主要只能執行在x86. 其在x64上的表現就是wow64模式下執行,此時與32位程式是沒有差別的。

所以說,從.net framework 2.0開始才真正支援64位 。這個是由編譯器導致的問題。

再談CLR 目標平台的問題

曾經有朋友問到這樣的乙個問題 我要開發乙個能執行在64位機器上的應用程式,是不是應該使用visual studio 的64位版本來做?這是乙個似是而非的問題,首先其實visual studio 並沒有所謂的64位版本 然後,其實預設情況下,visual studio所編譯出來的應用程式就是可以既執行...

再談「蟲子」的問題

很感謝 加大碼 同志在上篇隨筆的恢復,讓我想起了許多問題。常言道,千里之堤,毀於蟻穴,軟體同樣如此。雖然軟體中的 bug本身不會像蟻穴那樣慢慢變大,但對使用者而言,它引起的錯誤 異常等的次數卻會越積越多,最終我們會失去使用者,造成不可挽回的損失,因此,這些質量的問題,我們必須注意,並制定相應的措施 ...

基於arm目標平台的建立

tar xfz qt embedded 2.3.10 free.tar.gz 解壓後qt 2.3.10 改名為qt 2.3.10 target export qtedir pwd qt 2.3.10 target tar xfz qt x11 2.3.2.tar.gz export qt2dir p...