2017-06-20 84 views
1

確定它是否爲64位的布爾值是完美的,但表示位數量的整數也可以。有沒有辦法檢查應用程序的操作系統是32位還是64位?

我想捕獲一些關於PC架構的信息以便進行統計。

+2

基本上是一個副本[如何找到機器是32位還是64位](https://stackoverflow.com/questions/2401756/how-to-find-if-the-machine-is-32bit-or- 64位)。 – Shepmaster

+0

@Shepmaster這個問題是關於[tag:c],而這個問題是關於[tag:rust]。 – tversteeg

+2

那麼?這個問題與Rust無關。根據定義,它是在詢問如何向操作系統查詢信息,這既不是Rust語言,也不是Rust的標準庫。 – Shepmaster

回答

2

在最好的情況下,您的程序已經編譯爲正確的架構/目標。這意味着您在編譯時已經知道該程序是否正在爲32位或64位目標進行編譯。您可以通過使用cfg() attributecfg!() macro檢查:

fn is_compiled_for_64_bit() -> bool { 
    cfg!(target_pointer_width = "64") 
} 

#[cfg(target_pointer_width = "32")] 
fn foo() { 
    println!("foo compiled for 32 bit"); 
} 

#[cfg(target_pointer_width = "64")] 
fn foo() { 
    println!("foo compiled for 64 bit"); 
} 

但要出貨僅32位二進制文​​件到您的用戶的情況下,通過用戶的32位硬件,然後執行是本地化程序由用戶的64位硬件兼容模式。要找到我們的程序實際上是在32位體系結構上運行還是僅在32位兼容性模式下運行更加困難,這取決於您的操作系統。我不知道有任何簡單的跨平臺方法可以做到這一點。我建議你爲每個你想要的架構分別編譯。

+1

問題是詢問操作系統是64位還是32位。不是應用程序。 – mason

+2

@mason該部分是由段落解決的「要找到我們的程序是否實際運行在32位體系結構上,或者只是在32位兼容模式下運行...」 – Shepmaster

-1

您可以使用此:

#[cfg(target_os="your operating system here")] 
// code here 

這真的只是檢查是否操作系統的程序編制上是推薦一個。然後,我想你可以做到這一點,檢查操作系統的位:

#[cfg(all(unix, target_pointer_width = "32"))] 
// code here 

如果是UNIX操作系統(只是一個佔位符,應支持Windows等),以及32操作系統位數。

+0

[Lukas Kalbertodt的答案](https:// stackoverflow。 com/a/44655636/155423)已經說過這個答案的作用;也許你可以清楚這個新答案帶來了什麼?這也具有相同的限制 - 在兼容環境中運行時不會報告64位。 – Shepmaster

+0

@Shepmaster對不起!我沒有完全讀懂它! – lolman

+0

@Shepmaster,在哪裏可以找到「target_os」和類似參數的有效值列表?謝謝。 –

相關問題