「
32-bit
表2 編譯器和作業系統關係
32-bit
作業系統
64-bit
作業系統
32-bit
編譯器
可編譯程式
可編譯程式
64-bit
編譯器 -
可編譯程式
表3 編譯後的應用程式和作業系統關係
32-bit
作業系統
64-bit
作業系統
32-bit
應用程式
可執行可執行(依賴於特定環境),但不能有效發揮機器效能
64-bit
應用程式 -
可執行,有可能有效發揮機器效能(取決於能否利用大記憶體等)
目前64位機器的使用越來越多,並將逐步替換
32位的機器。為了移植「
32-bit
」的應用到「
64-bit
1)數值型別表示的任何物件的取值範圍
2)指標的定址範圍
如下以visual c++
建立在64位windows作業系統中執行的應用程式
為例,看看移植時需要考慮的問題
[1]。
1)在64
位windows
作業系統中,
int和
long
是32
位值。如要編譯為
64 位平台的程式,注意不要將指標賦給
32位變數。
2)在64
位平台上,指標為
64位,如果將該指標賦給
32位變數,則應截斷該指標值。
3)在64
位windows
作業系統中,
size_t
、time_t
和ptrdiff_t
是64
位值。
4)在32位
windows
作業系統上
visual c++ 2005
之前的visual c++
版本中,
time_t
是32
位值。在
visual c++ 2005
和更高版本中,預設情況下,
time_t
是64
位整數。應注意**在**採用
int
值並將其作為
size_t
或time_t
值處理。數字有可能增長得比
32 位數大,並且資料在被傳遞歸
int儲存時有可能被截斷。
5)%x(十六進製制
int
格式)printf
修飾符在
64 位
windows
作業系統中不會按預期的那樣工作。它只對傳遞給它的值的前
32 位值執行操作。
6)windows 32
位作業系統使用
%i32x
顯示整數。
7)windows 64
位作業系統使用
%i64x
顯示整數。
所以,具體而言,需要考慮的就是同「範圍」有關的內容。比如,資料庫系統如果自己管理記憶體,那麼通常使用共享緩衝,在移植時,就需要考慮共享緩衝的大小問題。以前受限於「
32-bit
」,最大記憶體理論上不得大於
4g,但是在移植到「
64-bit
」後,這個限制被突破了,這就需要我們在定義共享記憶體的時候,考慮使用具有更大數值範圍的資料型別來表示共享記憶體的位址資訊。比如,在
postgresql7.4
中,createsharedmemoryandsemaphores
函式中表示共享緩衝大小的型別用的是「
int」,而在
postgresql8.3
中,同樣的函式中,表示共享緩衝大小的型別用的就變為「
size_t
」,size_t
是標準c
定義的資料型別,在
32位機器中,
size_t
定義為unsigned int,為4
個位元組,最多定址
4g的空間;在
64位機器中,
size_t
定義為64
位,最大定址
16eb
位元組的空間。
[1]摘自
msdn
32bit和64bit的區別
一般指的是cpu 332bit 普通的x86架構 i386,i586,i686 64bit 僅指x86 64架構 amd64,em64t amd64的位技術是在原始32位x86指令集的基礎上加入了x86 64擴充套件64位x86指令集,使這款晶元在硬體上相容原來的32位x86軟體,並同時支援x86 ...
64bit作業系統的重定向
64位作業系統下拷貝檔案重定向問題 問題 installshield2009安裝包在win 7 x64安裝,需要把檔案複製到windows system32 下面 可是系統會自動複製到windows syswow64下面,查一下來是檔案自動轉向 原因 64位作業系統有自動重定向功能,即使寫死了拷貝到...
計算機概論 64bit和32bit的CPU的不同
32位 wow32 64位 wow64,x64 指的是兩種不同的cpu架構。32位的cpu能夠在每個時鐘週期傳輸32位資料,而64位的cpu能夠在每個時鐘週期傳輸64位資料。32位系統可以訪問2 32個記憶體位址,即4gb的ram或物理記憶體。64位系統可以訪問2 64個記憶體位址,實際上是180億...