Есть ли хорошая причина для запуска 32-битных программ, а не 64-битных на 64-битные машины?

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

Похоже, что 64-битная версия программы будет более эффективной, позволяют более высокое использование памяти, если это необходимо, и т. д. Apple даже использует 64-битные процессоры для своих телефонов, хотя у них всего 1-2&ампер;усилитель; nbsp;ГБ оперативной памяти, что намного ниже 4&усилителя;усилитель; nbsp;ГБ для 32-разрядного процессора'ов.

Комментарии к вопросу (20)
Решение

Преимущества 32-битного программного обеспечения в 64-разрядной среде

  • Меньше памяти, особенно в указатель тяжелых приложений, 64-бит против 32-разрядной может легко удвоить требования к памяти.
  • Объектных файлов поменьше, а также.
  • Совместимость с 32-разрядной среде.
  • Утечки памяти жестко ограничен до 2&ампер;усилитель; nbsp;ГБ, 3&усилителя;усилитель; nbsp;ГБ, или 4&ампер;усилитель; nbsp;ГБ и выиграл'т болоте всей системы.

Недостатки 32-битных программ в 64-разрядной среде

  • 2&ампер;усилитель; nbsp;ГБ, 3&усилителя;усилитель; nbsp;ГБ, или 4&ампер;усилитель; nbsp;ГБ ограничение памяти на процесс. (Просто в процессе, в сумме несколько 32-битных процессов может использовать всю доступную системе память.)
  • Не используя дополнительных регистров и набор инструкций расширения в зависимости от х64. Это весьма компилятора и процессора конкретными.
  • Может потребоваться установка 32-битной версии все (большинство дистрибутивов Linux) или редкость (большинство версий Windows) библиотек и сред выполнения. Если 32-разрядная версия общая библиотека загружается исключительно для вашего приложения, и что рассчитывает на твой след. Никакой разницы, если вы связываете статически.

Другие аспекты

  • Водители, как правило, не является проблемой. Только в пользовательском пространстве библиотеки должны отличаться между 32-разрядной и 64-разрядной, а не на API модулей ядра.
  • Остерегайтесь разной ширины по умолчанию для целых типов, требуется дополнительное тестирование.
  • 64-разрядная архитектура процессора не может даже поддерживать 32-битной.
  • Определенные методы, как ASLR в и другие, в зависимости от гораздо большего адресного пространства, чем объем физической памяти выиграл'т хорошо работать (или вообще) в 32-битном режиме исполнения.

Если сравнивать с очень конкретной архитектуры процессора, операционная система и библиотеки инфраструктуры здесь нет, я выиграл'т быть в состоянии пойти в более детально.

Комментарии (13)

Разница между 32 бит и 64 бит программное обеспечение программное обеспечение размер указателей, и, возможно, размер целочисленных регистров. Что's оно.

Это означает, что все указатели в программе дважды размере. И (по крайней мере, на ILP32/архитектура LP64) долго здесь вдвое больше, а также. Обычно это получается около 30% увеличение размера кода. Это означает, что ...

  • ваш объектный код будет занимать ~30% больше времени, чтобы загрузить с диска в оперативную память
  • ваш объектный код будет занимать ~30% больше места в памяти
  • вы эффективно снизили пропускную способность памяти (для объектного кода) на ~20%
  • вы эффективно снизил размер кэша инструкций по ~20%

Это не незначительный отрицательный эффект на производительность.

Делать это имеет смысл только, если вы можете и"выкупить" и эти показатели стоит как-то. В принципе, есть два способа сделать это: вы много 64-битное целое математику, или вам нужно больше, чем 4 GiByte отображаемой памяти. Если один или оба из тех, правда, имеет смысл использовать 64-разрядное программное обеспечение, в противном случае он не'т.

Примечание: существует несколько архитектур, где нет соответствующих 32-или 64-разрядных вариантах. В этом случае вопрос, очевидно, не'т иметь смысл. Наиболее популярным являются для ia64, которая только 64 бит а не 32 битный вариант, и x86 на amd64, которые, хотя и тесно связанные, разных архитектур, как x86 32 бита, только для amd64 быть только 64-битная версия.

На самом деле, последнее утверждение не верно на 100%. Линукс недавно добавлена для x32 ABI, который позволяет запускать на amd64 код с 32-х битными указателями, так что даже если что'ы не "по-правильному" и архитектуры процессора, это способ с использованием архитектур amd64 архитектуру таким образом, как если бы это был родной 32-битный вариант. Это было сделано именно * потому, что нагрузки, которые я упомянул выше вызывает недвижимость* измеримых, количественных проблем для реальных пользователей, работающих в реальном мире код в реальных системах.

Комментарии (8)

Если программное обеспечение должно напрямую взаимодействовать с унаследованными системами, драйверов или библиотек, то вы, возможно, потребуется, чтобы поставить 32-битную версию, поскольку, насколько мне известно, ОС в целом (безусловно, Windows и Linux насколько мне известно) не'т позвольте смешивание 64-битных и 32-битного кода внутри процесса.

Например, если ваша программа нуждается в доступе к специальности скобяными, это's не редкость для потребителей, чтобы работать на более старых моделях, для которого доступны только 32-разрядные драйверы.

Комментарии (2)

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

Если ваше программное обеспечение является автономным исполняемым файлом, он'ы менее понятно. Если вы Don'т нужна ваша программа работать на старых ОС, вам не нужно, чтобы обеспечить 32-разрядной версии. Просто придерживайся 64-бит, указать, что он требует 64-битной ОС, и работу.

Однако если вам необходимо программное обеспечение, чтобы работать на старых ОС, то вы можете активно **** не хочу представить 64-разрядную версию. Если у вас есть две версии, то у вас двойное тестирование, и правильно тестирование программного обеспечения в различных операционных систем и языков-это не быстрый процесс. Так как 32-разрядное программное обеспечение работает вполне счастливо на 64-битную платформу, Это's все еще достаточно распространенным для программного обеспечения, чтобы быть выпущен только как 32-разрядные, особенно небольшим компаниям.

Также обратите внимание, что большинство телефонов являются 32-разрядными. Может быть, некоторые из них являются 64-разрядным, но там's немного веских причин, чтобы сделать этот шаг. Так что, если вы'вновь развивающимся кросс-платформенным и, возможно, хотите, чтобы ваш код, чтобы запустить на Android, а также, оставаясь 32-бит-это безопасный вариант.

Комментарии (3)