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

隨著64位windows的慢慢普及,現(xiàn)在做windows下的應用開發(fā)鸠窗,尤其是系統(tǒng)的一些插件的開發(fā)(IE停忿、Explorer等)中鼠,越來越需要同時開發(fā)32位和64位的版本了可婶,這就要我們在寫代碼的時候尤其注意對指針和整型數(shù)據(jù)的操作,以避免出問題援雇。
同一份代碼矛渴,可以根據(jù)Platform為Win32或X64來產(chǎn)出對應的版本,這是我們的目的惫搏。

字長模型

指針類型一般是跟隨系統(tǒng)位數(shù)的曙旭,32位系統(tǒng)下指針為32位,64位系統(tǒng)下指針為64位晶府,這個一般不會混淆,但是來到整型數(shù)據(jù)類型的時候钻趋,這里就有字長模型的區(qū)別了川陆。
字長模型中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三種茬射,這都是常見的字長模型,出現(xiàn)這些模型的原因是C/C++語言并有沒有規(guī)定諸如int冒签、long等這些整型的長度在抛,只是規(guī)定了這些類型的長度下限和相互的大小關(guān)系(如short <= int <= long <= long long),具體的實現(xiàn)由各個編譯器自行決定萧恕。
我們先來看一下在不同的字長模型下刚梭,不同整型所占用的空間大小:

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++使用的字長模型

VC的32位字長模型是ILP32票唆,而64位字長模型是LLP64朴读,這是因為從32位往64位遷移的時候,為了盡量減少兼容性的問題走趋,所以除了指針的位數(shù)從32位升到64位之外磨德,其他整型的長度都沒有變化。所以用vc進行64位程序開發(fā)和32位程序開發(fā)最大的不同就是指針的大小。
另外典挑,long long是C99才引入的酥宴,所以是VC6之后才支持這個類型,相比與long long您觉,windows下更常用的是__int64(long long也是__int64 typedef的)
類UNIX系統(tǒng)的各類編譯器在64位下一般都是使用LP64字長模型拙寡。

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

要達到一套代碼自適應32位和64位,我們就需要用到windows給我們定義的兩套數(shù)據(jù)類型琳水,一種是精準的數(shù)據(jù)類型肆糕,其不論在32位還是64位下大小都是一樣的(一般以長度結(jié)尾),如DWORD32在孝、DWORD64诚啃、INT32、INT64私沮、UINT32始赎、UINT64等;另一種就是所謂的“多態(tài)類型”仔燕,其長度以指針的長度作為基準(一般以_PTR結(jié)尾)造垛,常用的有:LONG_PTR、ULONG_PTR晰搀、UHALF_PTR(無符號指針長度的一半)五辽、LPARAM、WPARAM(即UINT_PTR)
總的來說外恕,指針我們一般都要使用_PTR這種類型杆逗,如果需要確定長度的就使用精確類型,其他情況普通類型也可以勝任鳞疲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末髓迎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子建丧,更是在濱河造成了極大的恐慌排龄,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翎朱,死亡現(xiàn)場離奇詭異橄维,居然都是意外死亡,警方通過查閱死者的電腦和手機拴曲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門争舞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澈灼,你說我怎么就攤上這事竞川〉暌纾” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵委乌,是天一觀的道長床牧。 經(jīng)常有香客問我,道長遭贸,這世上最難降的妖魔是什么戈咳? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮壕吹,結(jié)果婚禮上著蛙,老公的妹妹穿的比我還像新娘。我一直安慰自己耳贬,他們只是感情好踏堡,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咒劲,像睡著了一般顷蟆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缎患,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音阎肝,去河邊找鬼挤渔。 笑死,一個胖子當著我的面吹牛风题,可吹牛的內(nèi)容都是我干的判导。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼沛硅,長吁一口氣:“原來是場噩夢啊……” “哼眼刃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起摇肌,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤擂红,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后围小,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昵骤,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年肯适,在試婚紗的時候發(fā)現(xiàn)自己被綠了变秦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡框舔,死狀恐怖蹦玫,靈堂內(nèi)的尸體忽然破棺而出赎婚,到底是詐尸還是另有隱情,我是刑警寧澤樱溉,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布挣输,位于F島的核電站,受9級特大地震影響饺窿,放射性物質(zhì)發(fā)生泄漏歧焦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一肚医、第九天 我趴在偏房一處隱蔽的房頂上張望绢馍。 院中可真熱鬧,春花似錦肠套、人聲如沸摊欠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醒颖。三九已至,卻和暖如春刁赖,著一層夾襖步出監(jiān)牢的瞬間搁痛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工宇弛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸡典,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓枪芒,卻偏偏與公主長得像彻况,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舅踪,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容