有没有办法检查应用程序的操作系统是32位还是64位?

问题描述:

确定它是否为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

在最好的情况下,您的程序已经编译为正确的架构/目标。这意味着您在编译时已经知道该程序是否正在为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

您可以使用此:

#[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”和类似参数的有效值列表?谢谢。 –