2009-11-18 82 views
1

如何确定当前运行的Mac OS X系统是32位还是64位机器?系统架构

+0

另外一个重复的,虽然到公平的重复没有被接受的答案。 http://stackoverflow.com/questions/853798/programmatically-get-processor-details-from-mac-os-x – GManNickG 2009-11-18 08:29:52

+0

什么编程语言? – Asaph 2009-11-18 08:29:57

+0

哦,是的,我想我不应该假设在重复开心之前。 :X – GManNickG 2009-11-18 08:30:25

回答

0

我很确定在32位系统上的sizeof(long) == 4和在64位系统上的sizeof(long) == 8。指针也应该是这样。

+2

这可以让你确定你的应用程序是否编译为64位或32位,它不会让你知道,如果你在64位或32位系统上运行。虽然可以假设指针大小为8,这意味着系统是64位,如果是4,那么您可以在64位系统上运行32位二进制。 – 2009-11-18 09:45:33

0

有点greppy,但..

#!/bin/sh 

ioreg -l -p IODeviceTree | grep EFI64 
if [ $? = 0 ] 
then 
    echo "I am a 64bit machine!" 
else 
    echo "I am a 32bit machine!" 
fi 

包裹在一个NSTask *task = [[NSTask alloc] init]; ...

+0

我们确定这个脚本是否有效?在运行10.5.8的Intel Core 2 Duo上,我总是获得32位的结果。 (铝制MacBook,1岁)。但是,当我运行'ioreg -l -p IODeviceTree | grep EFI64'没有脚本的其余部分,我看到64位结果(''firmware-abi“= <"EFI64">' – 2009-11-19 17:29:32

+0

好吧,我无法在我的机器上测试它,只是在不同的地方阅读(http ://www.9to5mac.com/snow-leopard-64-bit-32-bit-firmware-efi,http://blog.galensprague.com/?p=200);我昨天听到很多关于胶水代码的消息在技​​术讲座,所以我只是张贴它.. 确实: ioreg -l -p IODeviceTree | grep固件-abi | grep -o EFI32'' 产生其他/更好的结果? – miku 2009-11-19 17:36:21

1

这取决于你的意思是“64位机器”。有大致三类取决于处理器家族:

  1. 支持一些64位的数学运算
  2. 可以在X-64模式程序(64位寻址)
  3. 有64位内核支持

我假设你的意思是“2”,因为这与应用程序代码最相关。我相信,除非你需要运行在老式的PowerPC Mac上,否则你不必担心“1”的感觉。

您特别提到了在C代码中这样做,这实际上没有多大意义。如果你正在编译的C代码,你可以建立自己的应用程序“胖”,有32位和64位的变体,因此做检查在编译时间:

#if _LP64 
//64-bit stuff 
#else 
//32-bit stuff 
#endif