2013-05-17 48 views
1

iOS可能检测到设备的当前处理器。 我正在处理的项目需要以编程方式检查处理器是ArmV7还是ArmV7。检测处理器ArmV7与ArmV7s。 Objective-C

+0

你检查这http://stackoverflow.com/questions/5567215/how-在运行时确定二进制图像体系结构 – Buntylm

+0

@BuntyMadan:该答案显示了如何找到编译可执行文件或共享库的体系结构,而不是当前的处理器体系结构。 –

+0

是的,感谢您的建议,但这需要动态检测。 –

回答

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 */ 
+0

检查mach/machine.h以获取cpu子类型值。 – Emmanuel

+0

有趣的问题1:当'sysctlbyname(“hw.cpusubtype”,...)'给你一个意想不到的值时,你的代码是做什么的?有趣的问题2:当你的应用运行在你的应用后发布的设备上时,你会怎么想?得出结论。 –

+0

除了'value'将包含一个对应于未知处理器子类型的数字之外没有任何问题。 – sbooth

0

我不知道任何API来检查这个,但你也许可以自己写一个,通过为相同的符号提供v7和v7s汇编程序实现,只需根据需要返回true或false。

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

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在编译时使用当前代码..

-2

你没有。

也就是说,在iOS上运行时以编程方式检测ARM体系结构版本支持不可取。这是我从苹果工程师那里得到的答案,当我特意提出这个问题时,并且给出了一些陷阱(例如,当你得到意想不到的价值时你会怎么做?),我可以相信他们。

(是的,有时是正确的答案是“我如何?”的问题是“你不知道。”)