1. 程式人生 > >【轉載】將32位程式碼向64位平臺移植的注意事項

【轉載】將32位程式碼向64位平臺移植的注意事項

新近的64位平臺在二進位制上與32位應用程式相容,這意味著可以非常簡單地移植現有的程式。許多目前在32位平臺上執行良好的程式也許不必移植,除非程式有以下要求:
·需要多於4GB的記憶體。
·使用的檔案大小常大於2GB。
·密集浮點運算,需要利用64位架構的優勢。
·能從64位平臺的優化數學庫中受益。
否則,只需簡單地重新編譯一下,就已經足夠了。大多數編寫良好的程式不費吹灰之力就可移植到64位平臺之上,在此假定你的程式編寫良好,並熟悉本文將要討論的問題。 
ILP32和LP64資料模型
32位環境涉及"ILP32"資料模型,是因為C資料型別為32位的int、long、指標。而64位環境使用不同的資料模型,此時的long和指標已為64位,故稱作"LP64"資料模型。
現今所有64位的類Unix平臺均使用LP64資料模型,而64位Windows使用LLP64資料模型,除了指標是64位,其他基本型別都沒有變。我們在此主要探討ILP32到LP64的移植問題,表1顯示了ILP32與LP64資料模型的差異。
向64位移植程式碼時的所有問題差不多都可以總結出一個簡單的規律:千萬不要認為int、long、指標的長度一樣。任何違反這條規律的程式碼,當執行在 LP64資料模型下時,都會出現不同的問題,而且很難找出原因所在。例1中有許多違反這條規律的地方,其在移植到64位平臺上時都需要重寫。
例1: