Перемещение в 64-разрядное обращение

В этой главе описываются полную 64-разрядную инициативу для OS X и дает совет и инструкции для перемещения Ваших проектов Какао к 64-разрядному обращению.

64-разрядная инициатива

Начиная с версии 10.4 (Тигр) OS X перемещался в модель, поддерживающую 64-разрядное адресное пространство. В этой модели, названной LP64, long целые числа и указатели - оба 8 байтов (64 бита) вместо 4 байтов. Кроме того, size_t целый тип составляет 8 байтов вместо 4 байтов. Выравнивание этих типов для LP64 также увеличилось до 8 байтов. Размеры всех других примитивных целых типов (char, int, off_t, и т.д.), остаются, как они находятся в 32-разрядной модели (ILP32), но выравнивании некоторых — а именно, long long и pos_t— увеличился до 8 байтов для LP64.

На архитектурах Intel 64-разрядный режим также влечет за собой увеличение и в числе регистров и в их ширине, а также изменении в соглашениях о вызовах передать параметры в регистрах вместо на штабеле. Как прямое следствие этих изменений, 64-разрядные исполнимые программы в основанных на Intel системах OS X могут видеть повышение производительности. (Расширение регистров не происходит на архитектуре PowerPC, потому что это было разработано для 64-разрядных вычислений с самого начала.) Несмотря на то, что ядро (Дарвин) остается 32-разрядным, оно поддерживает 64-разрядное программное обеспечение в пространстве пользователя.

Все указатели в 64-разрядном процессе составляют 64 бита; нет никакого «смешанного режима», в котором некоторые указатели составляют 32 бита, и другие - 64 бита. Следовательно, все двоичные файлы поддержки должны были выполнить процесс, включая платформы, библиотеки и плагины, должны быть 64-разрядные способный, если процесс должен работать в 64-разрядном адресном пространстве. Все зависимости требуют портирования на 64-разрядный.

Как часть 64-разрядной инициативы для OS X v10.5 (Leopard), Apple портирует все системные платформы, библиотеки и плагины для поддержки 64-разрядного обращения. Они упаковываются для поддержки и 32-разрядных и 64-разрядных исполнимых программ. Таким образом, если у Вас есть 32-разрядное приложение и 64-разрядное приложение, работающее одновременно, оба штабеля платформы, от которых приложения имеют зависимости, загружаются в память. Компилятор GCC, компоновщик, отладчик и другие средства разработки были также изменены для поддержки 64-разрядного обращения. Системные демоны также изменяются для поддержки 64-разрядных процессов. Платформы Какао, а также время выполнения Objective C и связанные средства разработки являются частью усилия по портированию. (Изменения Какао описаны в 64-разрядных Изменениях В Какао API.)

Несколько изменений были также внесены для посредничания целых типов на нижних уровнях системы. Например, базовый тип примитива для CFIndex в Базовой Основе был изменен, чтобы быть 64-разрядным в то время как это для SInt32 в Углероде Ядро было изменено, чтобы остаться 32-разрядным в 64-разрядном мире. Эти изменения проникают на более высокие уровни системы, влияя на платформы, где они представляют эти типы в своем APIs.

Существует несколько последствий и импликаций перехода к 64-разрядному адресному пространству:

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

Я должен переместить свой проект в 64-разрядный?

Для OS X v10.5 (Leopard), просто небольшой процент проектов имеет любую потребность переместиться в 64-разрядное адресное пространство. Обычно эти проекты для приложений, требующих увеличенного адресного пространства для управления большими наборами данных, или которые должны иметь произвольный доступ к объектам данных чрезмерные 4 ГБ. Некоторые примеры приложений, попадающих в эту категорию, включают тех, которые выполняют научные вычисления, крупномасштабный 3D рендеринг и анимацию, анализ данных и специализированную обработку изображений.

Для выпусков после OS X v10.5 ожидается, что все больше проектов программного обеспечения — включая большинство пользовательских приложений — сделает переход к 64-разрядному. Существует несколько причин этого ожидания:

Таким образом несмотря на то, что Ваше приложение, возможно, сразу не должно делать переход к 64-разрядному, через несколько лет это будет. Можно начать теперь подготавливать проекты к этому переходу, продолжившись шаг за шагом. Во-первых, сделайте свои проекты 64-разрядными чистый путем слияния новых 64-разрядных типов в код и использования условных выражений препроцессора для поддержания исходной совместимости. Проект должен быть в состоянии скомпилировать без ошибок и работать. Затем сделайте свои проекты 64-разрядными, включил при помощи APIs тому экспрессу 64-разрядные количества. Наконец, сделайте свои проекты 64-разрядными способный путем обеспечения, что все пути выполнения кода способны к контакту с 64-разрядными количествами.

Можно упростить процесс перехода путем принятия собственных OS X технологий и типов данных. Например, при использовании Базовых Данных (см. Базовое Руководство по программированию Данных) для управления данными приложения, можно сократить количество параметров, которые необходимо рассмотреть в принятии. Типы атрибута, которые Вы указываете для Базовых объектов Данных, являются тем же на 32-и 64-разрядные платформы. Формат файла независим от платформы (это - то же, является ли узлом Intel - или основанный на PowerPC, 32-или 64-разрядный); кроме того, с помощью ленивой инициализации данных, доступной с хранилищем SQLite, Базовые Данные позволяют Вам работать с наборами данных, размер которых ограничивается прежде всего узлом. Вместе эти функции упрощают для Вас масштабироваться беспрепятственно от 32-до 64-разрядного.

Можно использовать существующие технологии для подавания заявки, «универсальной» упаковочными двоичными файлами в комплекте приложений с 64-разрядными и 32-разрядными вариантами, объединенными с вариантами для PowerPC и архитектур Intel. Таким образом Ваше приложение могло иметь двоичные файлы мультиархитектуры с четырьмя путями, с двоичными файлами для 32-разрядного PowerPC, 64-разрядный PowerPC, 32-разрядный Intel, и 64-разрядный Intel. Обычно Вы захотите приложение, поставляющее столь же 64-разрядный для поставки как 32-разрядный также, так как Вы хотите, чтобы оно работало на только аппаратных средствах на 32 бита, которые много лет будут распространены.