1

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

4

4 回答 4

3

我不确定这是否会提供您想要的信息,但我会尝试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 */
于 2013-05-17T15:02:33.050 回答
1

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

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

于 2013-05-17T14:52:26.343 回答
0

这边走:

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..

于 2013-05-29T09:36:44.910 回答
-2

你没有。

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

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

于 2015-06-02T10:15:12.010 回答