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

时间:2017-06-20 13:56:20

标签: rust 32bit-64bit cpu-architecture

确定它是64位的布尔值是否完美但是表示位数的整数也可以。

我想捕获有关PC架构的一些信息,以便进行统计。

2 个答案:

答案 0 :(得分: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; 64位硬件。要确定您的程序是实际运行在32位架构上还是仅在32位兼容模式下运行,这将更加困难,具体取决于您的操作系统。我不知道有任何简单的跨平台方式来做到这一点。我会建议你为你目标的每个架构单独编译。

答案 1 :(得分:-1)

您可以使用:

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

这只是检查程序编译的操作系统是否是推荐的操作系统。然后我想你可以这样做来检查操作系统的位:

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

其中unix是操作系统(只是一个占位符,应该支持Windows等),32是OS的位数。