【问题标题】:How to check in Rust if architecture is 32 or 64 bit?如果架构是 32 位或 64 位,如何签入 Rust?
【发布时间】:2017-06-13 06:46:04
【问题描述】:

如果有条件检查处理器是 32 位还是 64 位?我正在寻找一种配置检查,例如#cfg[x86]cfg[x64]

【问题讨论】:

  • 您想在编译时检测到这个(启用/禁用不同的功能)还是运行时检测就足够了?后者可以使用if mem::size_of::<usize>() == 8 完成(并将被优化)。
  • 在编译时,禁用部分代码。

标签: rust processor


【解决方案1】:

the Rust referencecfg 部分的#[cfg(target_pointer_width = "64")] 似乎是一个可能的解决方案。它基于指针的大小(以及isizeusize),应该与架构相对应。

【讨论】:

  • 应该与架构相对应——并不总是如此。例如,AVR 芯片有 16 位指针,但是是 8 位架构。
  • 那么答案也不是?
  • 更多的是你问的问题不够具体。你为什么关心“架构”?如果您关心指针的大小,这是一个问题。如果您关心其他方面,那么target_arch 可能是对的。如果您关心整数的本机 CPU 大小,那么我知道没有答案。
  • 块排序在定义 FloorOfTwo 函数时使用术语 64 位系统。我不确定在这种情况下 64 位意味着什么? en.wikipedia.org/wiki/Block_sort#Algorithm
  • 那似乎是对算法的糟糕解释。这可能并不意味着 system 是否为 64 位,它意味着特定值是否具有一定数量的位。在示例中,它总是以数组长度调用。因为这是 Rust 中的 usize,所以您关心使用大小的大小。虽然您可能只使用usize::next_power_of_two
【解决方案2】:

您应该查看 conditional compilation 上的 Rust 参考章节:

target_arch = "..." - 目标 CPU 架构,例如 "x86""x86_64""mips""powerpc""powerpc64""arm""aarch64"。该值与平台目标三元组的第一个元素密切相关,但并不完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2020-11-13
    相关资源
    最近更新 更多