回覆列表
  • 1 # 使用者4101580870182

    首先64位的CPU需要相容32位的指令集。這就搞定了32位作業系統的執行問題了(除非你的硬體驅動只有64位版本……End of NVIDIA Driver Support for 32-bit Operating Systems)。

    然後作業系統需要做一套32位的API。這個API的實現和64位的並不會完全一樣,比如桌面只有一個64位版本的,不會去另開一個32位的桌面。很多32位的系統元件API的實現裡面實際上是呼叫的64位的元件而不是自己再做一份出來。當然呼叫之前會轉引數型別,64位和32位的程式碼通訊的時候會有資料大小/位元組對齊等等差異。

    還有個問題是64位系統上的驅動也只有一份,所以第三方硬體廠商需要做64位和32位通用的驅動(使用者態驅動除外)。雖然系統會在呼叫驅動的時候自動做引數轉換,但是驅動私有的資料系統是不知道型別的,所以有私有資料包含平臺依賴型別或者有位元組對齊差異的話驅動作者也要判斷呼叫者是32位還是64位,不然分分鐘搞藍色畫面。當然驅動作者也可以在私有資料裡用平臺無關型別——比如給指標搞個8位元組對齊——不過那樣一個是浪費記憶體不說,驅動在被32位程式呼叫的時候也會很慢(Vista剛出的時候很多驅動在32位程式呼叫的時候很慢就是這原因……)。通常的寫法還是做兩套IO碼,在IO碼裡面用一個位元組表示是32位還是64位呼叫。

  • 中秋節和大豐收的關聯?
  • 羽絨服怎麼洗好?我要手洗的,用什麼洗滌劑呢?