我想创建一个C代码,其中包含两个分开的块。我想使用提取CPU模型的函数或工具,并基于此函数来决定执行哪个代码块。我只有这个主意,我不知道如何实现! 第一个代码块将在Intel i7上执行,第二个代码块应在ARM Cortex A53上执行。 PS:我是一个初学者,与硬件和类似的东西无关。谢谢您的帮助:)
答案 0 :(得分:0)
正如明确指出的那样,首先您不能拥有一个运行到可以从x86确定ARM的C程序,因为该代码必须已经是ARM或x86。这些是不同的指令集。您可以使用python或JAVA或其他脚本/虚拟机语言。但是随后您有一个为某个目标或另一个目标构建的编译时间决定,到那时,您已经知道实际上在哪个目标上运行代码,因此,如果严格来说这是ARM vs X86,则没有理由检查运行时。并不是说每个体系结构和/或系统都可以检查例如ARMv6 vs ARMv7的体系结构和风格,但不一定要检查ARMv7 32位和ARMv8 64位,尽管从技术上讲您可以运行aarch32和aarch64指令大多数ARMv8上的设置只是不混用,必须自己更改操作系统或执行级别才能在它们之间切换。
您确实了解到存在不同的不兼容指令集,特别是您所描述的指令集,并且C代码被编译为一个或另一个。因此,您无法在C语言中为某个目标编译程序以检测其他目标。在此之前,您已经选择了目标。现在有仿真器,但是它们也倾向于以一种架构为目标。有/某些来自特定供应商的产品会模拟一个指令集,并将其在运行时转换为另一指令集,随着时间的流逝,当您重新运行该代码时,它将继续转换它。您可以尝试这样做,但是仍然必须在正确的逻辑/仿真器上为正确的目标运行代码,然后进行特殊的检测,这不是找到真正的底层体系结构的规范,不是伪造的仿真器。 >
我怀疑您在考虑可以使用一个特定于体系结构的模块来检测该体系结构以运行特定于体系结构的代码。通常,这不适用于C,尝试尝试也没有意义,因此可能没有一个好的工具。特别是因为解决此类问题的方法是要么将其内置到二进制文件格式中,然后操作系统便会选择它(因为它知道),要么用目标独立语言(如Python或JAVA)或脚本语言(如perl,bash,等等,它们可以独立于目标来确定体系结构(在这种情况下,解决方案针对特定的操作系统和初学者使用的语言而有很大不同),然后选择要运行的二进制文件。
答案 1 :(得分:-1)
有很多方法可以实现您想要的。要检查存在的型号,您首先必须阅读具有的型号。 Windows和Linux之间的操作方法有所不同。我发现这个主题非常有帮助,也可能是您进行研究的一个很好的开始:How to check CPU name, model, speed on Windows/Linux C?