C 關於X86 X64 AnyCpu 的關係

2022-09-19 13:54:11 字數 714 閱讀 1635

電腦硬體cpu可以分為x86與x64, x86的機器只能安裝32位的作業系統,如xp, win7_86, x64的機器既可以安裝32位的系統,又可以安裝64位的系統,只是在x64的機器上安裝32位的系統,不能夠很充分的利用這台機器的資源。x86程式,即適用於32為作業系統的程式,x64即適用於64位作業系統的程式。64位系統上依然可以執行32位的程式,但是這是通過wow64來執行,通俗上講,就是模擬出乙個32位的cpu來執行這個程式。

接下來是c#程式的編譯執行,分為兩步,第一步是編譯成il,在編寫c#程式的時候,需要考慮到在最終程式需要在哪種環境下執行。build中預設的環境是any cpu,還有x86,x64. 這些有什麼不同?根據名字,我們可能認為,編譯器會根據選擇的環境不同來生成不同的二進位制檔案。然而,c#編譯器只是把**編譯成為了il**,以dll的形式。然後再程式執行的時候,jit編譯器才把il**編譯為cpu能夠識別的二進位製碼。所以,無論選擇哪個環境,都不會影響dll的生成,只是在dll的標頭檔案中加入了一些平台資訊,最終執行的時候jit會根據這些資訊來編譯dll給cpu處理。

有人說,難道不可以一直把project設定為any cpu嗎?因為現在很多的系統都是64位的,所以我們的程式設定成any cpu, 在64位機器上跑的時候就是64位的程式,但是這些程式很多時候需要使用一些元件,比如com元件等,而這些元件僅僅是32位的dll,根本不支援64位,當我們用64位的程式呼叫這些dll的時候就會有問題。所以,這時候,我們就需要把我們的程式設定成x86.

x86,x64表示什麼含義

簡單的說x86代表32位作業系統 x64代表64位作業系統 windows7 32位和64位的區別主要有以下兩個方面 1.兩種系統對cpu gprs的資料寬度要求不同,乙個是64位,乙個是32位 如果你的cpu是雙核以上,那肯定支援64位作業系統了 2.對記憶體的要求,64位支援4g及以上記憶體的電...

x64 x86有啥區別

下面簡單與大家分享x64和x86的區別。x64 x86有啥區別 這個問題和 32位和64位有啥區別 是一樣的 因為x64其實就是64位,x86其實就是32位 在口語中我們說32位會多於x86,至少這樣更符合中文的語言習慣,所以下文以32位指代x86,以64位指代x64 32位和64位指的是什麼 而不...

X86 X64 函式呼叫約定

c 語言有 cdecl stdcall fastcall naked pascal。c 語言有 cdecl stdcall fastcall naked pascal thiscall,比 c 語言多出一種 thiscall 呼叫方式。下面詳細介紹如上六種呼叫方式 1 cdecl cdecl呼叫約定...