深入理解64 bit(五)

2021-07-28 11:05:41 字數 2207 閱讀 8213

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億...