【W(wǎng)indows】32/64位程序一體開(kāi)發(fā)

隨著64位windows的慢慢普及,現(xiàn)在做windows下的應(yīng)用開(kāi)發(fā),尤其是系統(tǒng)的一些插件的開(kāi)發(fā)(IE、Explorer等),越來(lái)越需要同時(shí)開(kāi)發(fā)32位和64位的版本了,這就要我們?cè)趯?xiě)代碼的時(shí)候尤其注意對(duì)指針和整型數(shù)據(jù)的操作,以避免出問(wèn)題。
同一份代碼,可以根據(jù)Platform為Win32或X64來(lái)產(chǎn)出對(duì)應(yīng)的版本,這是我們的目的。

字長(zhǎng)模型

指針類(lèi)型一般是跟隨系統(tǒng)位數(shù)的,32位系統(tǒng)下指針為32位,64位系統(tǒng)下指針為64位,這個(gè)一般不會(huì)混淆,但是來(lái)到整型數(shù)據(jù)類(lèi)型的時(shí)候,這里就有字長(zhǎng)模型的區(qū)別了。
字長(zhǎng)模型中I表示int,L表示long,P表示pointer,LL表示long long,如ILP32指int、long、pointer都是32位,LLP64指long long和pointer是64位。
32位系統(tǒng)有ILP32和LP32兩種,64位系統(tǒng)有LP64、ILP64、LLP64三種,這都是常見(jiàn)的字長(zhǎng)模型,出現(xiàn)這些模型的原因是C/C++語(yǔ)言并有沒(méi)有規(guī)定諸如int、long等這些整型的長(zhǎng)度,只是規(guī)定了這些類(lèi)型的長(zhǎng)度下限和相互的大小關(guān)系(如short <= int <= long <= long long),具體的實(shí)現(xiàn)由各個(gè)編譯器自行決定。
我們先來(lái)看一下在不同的字長(zhǎng)模型下,不同整型所占用的空間大?。?/p>

LP32 ILP32 LLP64 LP64 ILP64
char 8 8 8 8 8
short 16 16 16 16 16
int 16 32 32 32 64
long 32 32 32 64 64
long long 64 64 64 64 64
pointer 32 32 64 64 64

Visual C++使用的字長(zhǎng)模型

VC的32位字長(zhǎng)模型是ILP32,而64位字長(zhǎng)模型是LLP64,這是因?yàn)閺?2位往64位遷移的時(shí)候,為了盡量減少兼容性的問(wèn)題,所以除了指針的位數(shù)從32位升到64位之外,其他整型的長(zhǎng)度都沒(méi)有變化。所以用vc進(jìn)行64位程序開(kāi)發(fā)和32位程序開(kāi)發(fā)最大的不同就是指針的大小。
另外,long long是C99才引入的,所以是VC6之后才支持這個(gè)類(lèi)型,相比與long long,windows下更常用的是__int64(long long也是__int64 typedef的)
類(lèi)UNIX系統(tǒng)的各類(lèi)編譯器在64位下一般都是使用LP64字長(zhǎng)模型。

32位/64位程序一體開(kāi)發(fā)

要達(dá)到一套代碼自適應(yīng)32位和64位,我們就需要用到windows給我們定義的兩套數(shù)據(jù)類(lèi)型,一種是精準(zhǔn)的數(shù)據(jù)類(lèi)型,其不論在32位還是64位下大小都是一樣的(一般以長(zhǎng)度結(jié)尾),如DWORD32、DWORD64、INT32、INT64、UINT32、UINT64等;另一種就是所謂的“多態(tài)類(lèi)型”,其長(zhǎng)度以指針的長(zhǎng)度作為基準(zhǔn)(一般以_PTR結(jié)尾),常用的有:LONG_PTR、ULONG_PTR、UHALF_PTR(無(wú)符號(hào)指針長(zhǎng)度的一半)、LPARAM、WPARAM(即UINT_PTR)
總的來(lái)說(shuō),指針我們一般都要使用_PTR這種類(lèi)型,如果需要確定長(zhǎng)度的就使用精確類(lèi)型,其他情況普通類(lèi)型也可以勝任。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容