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

5
我知道可以使用终端和system-profiler命令来确定内核的当前位数,但我正在尝试以编程方式在objective-c中获取相同的信息。
我已经查看了Carbon的gestalt,但没有找到任何告诉我内核位数的东西。你有什么建议吗?我需要这些信息用于调试报告,该报告在报告时给出系统的快照。
更新:我尝试过的一个技巧是从Windows世界学到的,即检查int的大小。
sizeof(int*); //(4 = x86 8 = x64)

但我认为这并不是一个解决方案,因为我认为这只会让我知道实际程序运行的情况,而不是实际的操作系统内核。我的理解是,即使操作系统内核运行在32位,您的程序仍然可以运行在64位。
我遇到过其他类似于这个帖子的论坛帖子,但它们似乎都没有得出答案,除了使用system_profiler。
3个回答

2
请参见man 3 uname:它填充了一个包含成员machineutsname结构,在Intel平台上,该成员是"x86_64""i386"
struct utsname un;
int res = uname(&un);
if (res >= 0) {
    NSLog(@"%s", un.machine);
}

谢谢Georg,我尝试了你的例子,但是无法让它工作。我相信这是我的问题,但我无法让它识别struct utsname。我的感觉是,这只会给我一个关于CPU类型的想法,而我要找的是当前操作系统内核的实际位数,而不是CPU能力。 - John Ten Cate
@user:使用struct utsname un; - 在这方面我仍然经常思考C++。这将为您提供内核构建的机器类型,这正是您要寻找的。 - Georg Fritzsche
我搞定了,你是赢家,这确实给了我所需要的信息!感谢你的帮助! - John Ten Cate

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;
   }
}

我尝试按照你描述的设置is64的bool值,但它总是返回false。如果我正确阅读代码,这只会告诉我物理CPU是否支持64位。我真正想知道的是,操作系统内核当前运行的比特数是多少。它是在运行x86(默认)还是在运行x64? - John Ten Cate

0

您应该能够像这样从命令行读取系统分析器信息:

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

请参考苹果文档中的ProfileSystem示例以了解如何解析它。

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


彼得,我开始认为你是正确的。我没有找到另一种获取“64位内核和扩展”的信息的方法。 - John Ten Cate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接