【问题标题】:Detect processor ArmV7 vs ArmV7s. Objective-C检测处理器 ArmV7 与 ArmV7s。 Objective-C
【发布时间】:2013-05-17 12:35:53
【问题描述】:

是否可以在 iOS 中检测设备的当前处理器。 我正在进行的项目需要以编程方式检查处理器是 ArmV7 还是 ArmV7s。

【问题讨论】:

  • @BuntyMadan:该答案显示了如何查找为哪些架构编译了可执行文件或共享库,而不是当前的处理器架构。
  • 是的,感谢您的建议,但这需要动态检测。
  • @MartinR 没错。

标签: ios objective-c


【解决方案1】:

我不确定这是否会提供您想要的信息,但我会尝试sysctl

int32_t value = 0;
size_t length = sizeof(value);
sysctlbyname("hw.cpusubtype", &value, &length, NULL, 0);

子类型的值在mach/machine.h中。

/*
 *  ARM subtypes
 */
#define CPU_SUBTYPE_ARM_ALL             ((cpu_subtype_t) 0)
#define CPU_SUBTYPE_ARM_V4T             ((cpu_subtype_t) 5)
#define CPU_SUBTYPE_ARM_V6              ((cpu_subtype_t) 6)
#define CPU_SUBTYPE_ARM_V5TEJ           ((cpu_subtype_t) 7)
#define CPU_SUBTYPE_ARM_XSCALE      ((cpu_subtype_t) 8)
#define CPU_SUBTYPE_ARM_V7      ((cpu_subtype_t) 9)
#define CPU_SUBTYPE_ARM_V7F     ((cpu_subtype_t) 10) /* Cortex A9 */
#define CPU_SUBTYPE_ARM_V7K     ((cpu_subtype_t) 12) /* Kirkwood40 */

【讨论】:

  • 检查 mach/machine.h 以获取 cpu 子类型值。
  • 有趣的问题1:当sysctlbyname("hw.cpusubtype", ...) 给你一个意想不到的值时,你的代码会做什么?有趣的问题 2:当您的应用程序在您的应用程序发布后发布的设备上运行时,您认为会发生什么?结束。
  • 除了value 将包含一个与未知处理器子类型对应的数字之外,没有任何问题。
  • 没问题?!!这是你的问题:给定一个未知值,要么你认为这意味着处理器支持 ARMv7s,如果 Apple 推出不一定支持其最新处理器的所有功能的新处理器,你就有崩溃的风险,或者你认为这意味着处理器不支持 ARMv7s,在这种情况下,您可能会在新推出的支持它的设备上性能更差。在你说你会在任何一种情况下快速做出反应之前,想象一下欧洲开发者听从你的建议,并且在最初几个月只在美国销售的新设备上遇到问题......
  • 我的回答回答了OP的问题,即如何识别设备当前的处理器。在某些情况下这是否是好的做法是不适合 cmets 的讨论。
【解决方案2】:

我不知道有任何 API 可以检查这一点,但您也许可以自己编写一个,为同一个符号提供 v7 和 v7s 汇编器实现,只需根据需要返回 true 或 false。

假设当且仅当处理器支持 v7s 时才会使用 v7s 实现,它应该可以工作。

【讨论】:

    【解决方案3】:

    这边:

    sysctlbyname("hw.cpusubtype", &value, &length, NULL, 0);
    

    很好,但还有更简单的方法:

    #include <mach-o/ldsyms.h>
    
    int processorType = _mh_execute_header.cputype;
    int processorSubtype = _mh_execute_header.cpusubtype;
    

    不过,它会显示当前代码在编译时使用的 cpu..

    【讨论】:

      【解决方案4】:

      你没有。

      也就是说,不建议在 iOS 运行时以编程方式检测 ARM 架构版本支持。这是我在专门问这个问题时从一位 Apple 工程师那里得到的答案,并且考虑到其中的陷阱(例如,当你得到一个意想不到的值时你会怎么做?),我可以相信他们。

      (是的,有时“我该怎么做?”问题的正确答案是“你不知道。”)

      【讨论】:

        猜你喜欢
        • 2012-01-09
        • 1970-01-01
        • 2019-01-11
        • 2013-03-30
        • 1970-01-01
        • 2012-09-07
        • 1970-01-01
        • 1970-01-01
        • 2011-02-18
        相关资源
        最近更新 更多