2009-11-18 90 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