2014-01-10 182 views
-3

32位程序如何能在64位系統中運行?32位程序如何能在64位系統中運行

因爲64位系統會有64位內存地址。 但是32位程序會嘗試使用32位大小的內存地址。

例)C浪:指針爲4字節,所以怎麼能儲存64位的內存地址(8字節)(如果它在64位系統上運行)

+0

因爲它沒有在64位系統中運行。它運行在一個運行在64位系統中的32位子系統中。指針仍然是4個字節(32位),並且您仍然有32位CPU寄存器;無法訪問該32位應用程序的64位指針或寄存器。 –

回答

2

因爲64位指令集架構通常具有向後兼容性的特點?允許運行「傳統」32位代碼並在模式之間切換。

例如,英特爾處理器以實模式啓動,然後操作系統跳入保護模式(基本上是32位),然後操作系統跳入長模式(基本上是64位)。長模式在它用於遺留代碼,並且指令編碼與以前版本的英特爾處理器兼容。

側面說明:64位是指在64位機器字,NOT 64位尋址(雖然往往都走到一起)這意味着一個64位處理器的基本整數大小爲64位很長,沒有別的。在英特爾的情況下,64位指令通常將靜態地址(即函數的地址)編碼爲32位偏移量而不是64位指針。因此,在默認代碼模型中,很多生成的代碼甚至不會編碼我們之前使用32位絕對地址的64位絕對地址。然而,另一方面,這個屬性是非常可取的,因爲使用相對地址可以更容易地在內存中移動代碼,並且不會犧牲使用64位指針或尋址的能力。

相關問題