Архитектура системы

Как определить, является ли работающая в настоящее время система Mac OS X 32-битной или 64-битной машиной?


person ypk    schedule 18.11.2009    source источник
comment
Также дубликат, хотя, честно говоря, у дубликата не было принятого ответа. stackoverflow.com/ вопросы/853798/   -  person GManNickG    schedule 18.11.2009
comment
О да, я полагаю, мне не следует предполагать это, прежде чем стать счастливым дублером. :ИКС   -  person GManNickG    schedule 18.11.2009
comment
Язык может быть C или Objective-C.   -  person ypk    schedule 18.11.2009
comment
Зачем вам это знать (что вы планируете делать с этой информацией)? На Mac много 32/46-битных гибридов, поэтому даже если процессор поддерживает 64-битное исполнение, он может не делать того, что вы хотите.   -  person Nicholas Riley    schedule 19.11.2009


Ответы (3)


Это зависит от того, что вы подразумеваете под «64-битной машиной». В целом существует три категории в зависимости от семейства процессоров:

  1. Поддерживает некоторые 64-битные математические операции.
  2. Может запускать программы в режиме X-64 (64-битная адресация)
  3. Имеет поддержку 64-битного ядра

Я предполагаю, что здесь вы имеете в виду значение «2», поскольку оно наиболее актуально для кода приложения. Я думаю, вам не нужно беспокоиться о значении «1», если вам не нужно работать на старых компьютерах PowerPC Mac.

Вы специально упомянули об этом в коде C, что на самом деле не имеет особого смысла. Если вы компилируете код C, вы можете просто собрать свое приложение «толстым» с 32- и 64-битными вариантами и, следовательно, выполнить проверку во время компиляции с помощью:

#if _LP64
//64-bit stuff
#else
//32-bit stuff
#endif
person Mark Bessey    schedule 19.11.2009

Я совершенно уверен, что sizeof(long) == 4 в 32-битных системах и sizeof(long) == 8 в 64-битных системах. То же самое должно быть верно и для указателей.

person outis    schedule 18.11.2009
comment
Это позволяет вам определить, было ли ваше приложение скомпилировано для 64-битной или 32-битной системы, но не позволяет узнать, работаете ли вы в 64-битной или 32-битной системе. Хотя можно предположить, что размер указателя 8 означает, что система 64-битная, если он равен 4, вы вполне можете запускать 32-битный двоичный файл в 64-битной системе. - person Louis Gerbarg; 18.11.2009

немного греппи, но..

#!/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]; ...?

person miku    schedule 19.11.2009
comment
Мы уверены, что этот скрипт работает? В результате я всегда получаю 32-битную версию на Intel Core 2 Duo с 10.5.8. (Алюминиевый MacBook, 1 год.) Тем не менее, когда я запускаю ioreg -l -p IODeviceTree | grep EFI64 без остальной части скрипта, я вижу 64-битный результат ("firmware-abi" = <"EFI64"> - person John Rudy; 19.11.2009
comment
хорошо, я не могу проверить это на своей машине, просто читал в разных местах (9to5mac.com/snow-leopard-64-bit-32-bit-firmware-efi, blog.galensprague.com/?p=200); и я много слышал о клеевом коде вчера в техническом докладе, поэтому я просто опубликовал его.. дает ли: ioreg -l -p IODeviceTree | grep firmware-abi | grep -o EFI32 другие/лучшие результаты? - person miku; 19.11.2009