如何在Mac OS X 10.6中确定内核位数?

时间:2010-08-31 15:15:33

标签: objective-c macos kernel

我知道我可以使用终端和system-profiler命令来确定内核的当前位数,但我正在尝试确定是否有办法在objective-c中以编程方式获取相同的信息。

我已经查看了Carbon的格式塔,但没有看到任何可以告诉我核心内容的东西。

有没有人对我如何做到这一点有任何建议?我需要这个信息用于调试报告,该报告在报告时提供系统的快照。

谢谢!

更新:我尝试过的一件事是我从Windows世界中学到的一个技巧是检查int的大小:

sizeof(int*); //(4 = x86 8 = x64)

但我不认为这是一个解决方案,因为我认为这只会让我了解实际程序本身运行的是什么,而不是实际的操作系统内核。我的理解是,即使操作系统内核以32位运行,您的程序仍然可以在64位运行。

我遇到了与此类似的其他论坛帖子,但似乎没有人在使用system_profiler之后得到答案。

3 个答案:

答案 0 :(得分:2)

请参阅man 3 uname:它填充了一个utsname结构,其中包含成员machine,即"x86_64""i386"在英特尔平台上:

struct utsname un;
int res = uname(&un);
if (res >= 0) {
    NSLog(@"%s", un.machine);
}

答案 1 :(得分:1)

您可以使用sysctlbyname。挖掘mach/machine.h以获得可能的值。

#include <mach/machine.h>
#include <sys/sysctl.h>

void example() 
{
   unsigned int cpuType;   
   size_t size = sizeof(cpuType);
   sysctlbyname("hw.cputype", &cpuType, &size, NULL, 0);

   bool is64 = cpuType & CPU_ARCH_ABI64;

   const char *cpu;

   switch (cpuType) {
      case CPU_TYPE_X86:
         cpu = "x86";
         break;
      case CPU_TYPE_X86_64:
         cpu = "x86_64";
         break;
      case CPU_TYPE_POWERPC:
         cpu = "ppc";
         break;
      case CPU_TYPE_POWERPC64:
         cpu = "ppc_64";
         break;
      case CPU_TYPE_SPARC:
         cpu = "sparc";
         break;
      default:
         cpu = "unknown";
         break;
   }
}

答案 2 :(得分:0)

您应该能够从命令行中读取系统探查器信息,如下所示:

sys_profile = popen("system_profiler -xml", "r");

请参阅Apple文档中的ProfileSystem示例,了解如何解析它。

软件/系统软件概述/ 64位内核和扩展可能是您想要的关键。