Различия между компиляцией для i386 против x86_64 в Xcode? - PullRequest
7 голосов
/ 16 июля 2010

Каковы различия между компиляцией приложения Mac в XCode с активной архитектурой, установленной на i386 против x86_64 (выбран в раскрывающемся списке в левом верхнем углу главного окна)? В настройках Build для проекта доступны следующие варианты архитектуры: Standard (32/64-bit Universal), 32-bit Universal и 64-bit Intel. Практически, что это значит и как каждый решает?

Предположим, один из них ориентирован на OS X 10.5 и выше. Я вижу в Activity Monitor, что компиляция для x86_64 приводит к тому, что приложение использует больше памяти, чем одно, скомпилированное для i386. В чем преимущество? Я знаю, что 64-разрядное - это «будущее», но учитывая более высокое использование памяти, имеет ли смысл выбирать 32-разрядное когда-либо?

Ответы [ 3 ]

8 голосов
/ 16 июля 2010

32/64-битная универсальная - i386, x86_64, PPC

32-разрядный универсальный - i386, PPC

64-разрядная версия Intel - только 64-разрядная версия Intel

ppc64 больше не поддерживается.

<Ч />

x86_64 двоичные файлы быстрее по ряду причин; более быстрый ABI, больше регистров, на многих (на большинстве и на всех новых машинах) машинах ядро ​​64-битное, вызовы ядра быстрее и т. д .etc.etc ...

Несмотря на то, что 64-битные ресурсы имеют небольшую нагрузку на память, напрямую связанную, как правило, с тем, насколько тяжелыми являются структуры данных вашего приложения, имейте в виду, что 32-битные приложения перетаскивают 32-битные версии всех сред. Если ваше единственное 32-битное приложение в системе, оно будет иметь огромные накладные расходы 1012 * по сравнению с 64-битной версией.

64-битные приложения также наслаждаются новейшим и лучшим Objective-C ABI; синтезированные ивары, не хрупкие ивары, унифицированные исключения C ++ / ObjC, блоки @try с нулевой стоимостью и т. д., а также ряд оптимизаций, которые возможны только в 64-разрядных системах.

0 голосов
/ 20 апреля 2017

Приложения для iOS должны работать на разных архитектурах:

arm7: Used in the oldest iOS 7-supporting devices[32 bit]
arm7s: As used in iPhone 5 and 5C[32 bit]
arm64: For the 64-bit ARM processor in iPhone 5S[64 bit]

i386: For the 32-bit simulator
x86_64: Used in 64-bit simulator

Xcode в основном эмулирует 32-битную или 64-битную среду в зависимости от того, что установлено в допустимой архитектуре - i386 или x86_64 соответственно

Каждая архитектура требует отдельного двоичного файла, и при создании приложения Xcode создаст правильную архитектуру для всего, с чем вы сейчас работаете. Например, если вы попросили его запустить в симуляторе, он соберет только версию i386 (или x86_64 для 64-битной версии).

0 голосов
/ 16 июля 2010

Если у вас нет причин для компиляции для x86_64, я рекомендую просто компилировать для i386 (и PPC, если вы поддерживаете это). Прочитайте Позиция Apple по этому вопросу:

Хотя 64-битные исполняемые файлы делают это Вам легче управлять большими данными наборы (по сравнению с отображением памяти большие файлы в 32-битном приложении), использование 64-битных исполняемых файлов может поднять другие вопросы. Поэтому ты следует перевести ваше программное обеспечение на 64-битный исполняемый формат только тогда, когда 64-битная среда предлагает убедительные преимущество для ваших конкретных целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...