日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

你为什么需要在64位系统下用32位程序

發布時間:2024/4/15 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你为什么需要在64位系统下用32位程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在64位系統下,用64位的程序自然是能夠充分利用cpu中的64位指令和64位的地址空間,可有的時候,我們卻不得不在64位系統下使用32位的程序。

64位和32位

對于64位還是32位,首先要從概念上把其理清,我覺得這可以分為三個層次:

  • 硬件
    主要是指CPU的指令集,寄存器,以及地址空間。比如x64體系結構的CPU,就是在32位的基礎上添加了64位的操作指令,寄存器,同時提供了64位的虛擬地址空間。一臺電腦能不能支持64位的系統,首先要看其硬件配置,即CPU是否支持64位指令:
    ?
    比如我的Dell Inspiron 1420,用的是intel的芯片,支持EM64T指令集,是屬于x64架構的。這里x64也叫x86-64,是一個體系架構,AMD的實現稱為AMD64,而intel的實現稱為Intel64,其指令集稱為EM64T.
  • 操作系統
    有了64位的CPU,你才能裝64位的操作系統,當然,你也完全可以在x64的機子上安裝32位的系統,因為其本來就是32位cpu的一個擴展,完全支持32位指令集。
    不同的64位系統有不同的編程模型(programming model),也就是常說的那些LP64, LLP64或者ILP64等等的,之所以出項這些所謂的編程模型,目的就是為了更好的兼容以前的32位下的編程模型,繼而能讓32位的源代碼比較容易的遷移到64位(更多內容參考:64-Bit Programming Models: Why LP64?),目前Windows支持的是LLP64,而Linux/Unix支持的是LP64 - 這種編程模型的差異恐怕會給我們編寫64位可移植程序帶來一定的困難。
  • 應用程序
    有了64位的操作系統,你才能運行64位的應用程序。當然,你也完全可以在64位系統下以兼容模式運行32位程序,而且因為cpu本來就支持這些32位的指令集,所以性能基本不會有影響。
  • 為什么需要在64位系統下使用32位程序

    所以在64位的系統上,我們最好使用64位的程序,但有的情況下,我們卻不得不在64位系統下運行32位程序。

    原因其實很簡單:不支持64位。

    我們知道,一個32位的程序要移植到64位上,因為一些數據類型大小的變化(主要是指針),是需要做很多工作的,包括代碼的更新與64位下的測試,所以,一些軟件廠商或者開發團隊會選擇不支持64位,或者想支持但無法及時推出一個64位版本,這里可以分為兩種情形:

  • 程序
    這種情況比較簡單,你不支持64位,我就直接在32位兼容模式(WOW64)下跑,反正影響也不大。而且,即使你沒做移植,同樣可以通過重新編譯而從64系統上獲取一些好處:
    However, on the x64 platform, 32-bit x86 applications may still benefit from a 64-bit recompile, due to the additional registers in 64-bit code, which a compiler can use for optimization.

  • 這種情況比較復雜,一個32位的庫,比如說DLL,你無法把他加載到你的64位進程中,原因很簡單,類型大小不匹配。舉個最簡單的例子,我調用這個32位庫中的函數傳個指針過去,傳過去的是64位的指針,可人家以為只有32位,這不撐破了嗎?
    要在64位的程序中使用32位的DLL,目前有個辦法就是通過一個32位的進程把32位的DLL加載進來,然后通過進程間通信(RPC)。一般情況下,這個32位進程是一個進程外的COM組件(參考:Process Interoperability)。 當然,我們在設計COM接口的時候要注意32位-64位的接口兼容性。簡單來講,在Windows上采用的是LLP64模型,32位和64位的差別主要在于指針類型,因為是RPC,COM的marshalling就能很好的解決這個問題。
  • 我想我們公司的軟件Autodesk Inventor就很好的說明了這個情況,大概在07年之前,Inventor是不提供64位版本的,所以在64位系統上Inventor是以32位兼容模式運行的,原因我想應該是Inventor龐大的source code使其無法迅速移植到64位之上。這是就是第一種情況;到07年支持64位后,因為微軟提供的VBA只有32位版本的(微軟為了推VSTA而放棄了VBA的開發),我們只能提供一個進程外COM組件通過RPC來調用VBA,所以在64位下啟動VBA速度會比較慢一點,這就是第二種情況。

    當然,這些應該都是過渡期的產物,將來的趨勢是要么支持64位而活下來,要么不支持64位而消亡,比如說VBA。但不可否認,這個過渡期是很漫長的。

    總結

    以上是生活随笔為你收集整理的你为什么需要在64位系统下用32位程序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。