【问题标题】:c++17 how can i get the CPU architecture cross platformc++17如何获得跨平台的CPU架构
【发布时间】:2021-02-05 04:27:45
【问题描述】:

基本上,我喜欢获取应用运行的 CPU 架构的类型 类似于 node.js os.arch()process.arch
它可以是我可以链接到我的应用程序的任何 C++/C 库 但不是 Qt,因为我无法使用它

更新

这就是 node.js 中的内容

 function arch(): string;
    /**
     * Returns a string identifying the kernel version.
     * On POSIX systems, the operating system release is determined by calling
     * [uname(3)][]. On Windows, `pRtlGetVersion` is used, and if it is not available,
     * `GetVersionExW()` will be used. See
     * https://en.wikipedia.org/wiki/Uname#Examples for more information.
     */

【问题讨论】:

  • 我看到的唯一相关的是getting number of threads supported。我想,除此之外的一切都依赖于操作系统,并且需要针对每种情况进行处理。
  • std::hardware_destructive_interference_size & std::hardware_constructive_interference_size 也与硬件有关,但我认为 gcc 拒绝实现这些。
  • @user63898 我没有投反对票 - 但仅使用标准 C++ 无法做到这一点。您必须使用操作系统特定的功能。
  • 这是用于什么平台的?
  • 没有多大意义,不像 Javascript C++ 是一种编译语言。使用特定于 cpu 的机器码作为编译结果。因此,您必须在编译之前选择架构。在运行时,您只会取回您之前已经知道的内容。

标签: c++ cpu-architecture


【解决方案1】:

标准 C++ 无法做到这一点。如果您使用 Qt,QSysInfo::currentCpuArchitecture() 完全符合您的要求。

【讨论】:

  • 这是如何工作的?有些嵌入式系统运行 C++,不会广播任何有关其处理器或地址映射方式的信息。
  • @ThomasMatthews 它显然只适用于 Qt 支持的系统。
  • Qt 是如何做到的?是否有一些 c/c++ 库可以从中提取代码?我不能使用 Qt
  • @user63898:对于拱门,可能它是一个很大的#ifdef __x86_64__ / #ifdef __arm__ / 等 Qt 支持的所有架构的链,因此希望该函数可以作为编译时常量内联细绳。 (也许每个编译器会检查哪些宏的变体。) OTOH 链接的文档说“由于正在使用的操作系统功能的性质”,这可能意味着在运行时(如uname),但可能只是意味着在 Qt 配置时硬编码一个值。
  • @user63898 Here 是 Qt 的做法。这是一段乱七八糟的代码。
猜你喜欢
  • 2012-09-11
  • 2019-06-16
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
相关资源
最近更新 更多