32-битные 64-битные — Почему мы должны создавать 64-битные цели для приложения C ++?

Это очень основное сомнение, которое у меня есть. Я не специалист по ИТ или CS, поэтому, пожалуйста, попробуйте объяснить простым языком.
Теперь я задаю этот вопрос потому, что мы можем запускать 32-битные приложения в 64 & 32-битные ОС. AFAIK типы данных для 64-битных занимают двойной объем памяти, чем 32-битные приложения. Также 64-битные приложения могут работать только на 64-битных ОС.
Тогда зачем создавать 64-битные приложения?
Возможно, поэтому Firefox доступен только в 32-битной версии ???
Извините, если этот вопрос не соответствует стандартам SO, но я просто не могу перестать думать о том же.
Благодарю вас.

ОБНОВЛЕНИЕ: почему-то, кажется, путаница.
Я не хотел задавать вопрос, зачем нам машина с 64-битной архитектурой.
Я знаю, что 32-битные машины могут использовать только 4 ГБ ОЗУ & 64-битные машины имеют гораздо более высокий предел.
Я задавался вопросом, почему мы должны создавать 64-битные приложения!

7

Решение

Помимо явных причин, приведенных выше (в основном «использование более 2-3 ГБ памяти»), причина для компиляции для 64-битной версии состоит в том, что x86-64 имеет 16 регистров, где x86-32 имеет 8. Поскольку один из этих регистров это указатель стека и часто rBP зарезервировано для «framepointer», фактическое полезное количество регистров составляет 6 и 14 соответственно. Дополнительные регистры позволяют, например, большее количество параметров, передаваемых в регистрах, и большее количество временных переменных, хранящихся в регистрах внутри функции. Это положительно влияет на фактическую скорость выполнения кода, так как каждый раз, когда память используется вместо регистра, по крайней мере, это приводит к более сложной инструкции и часто к дополнительной инструкции, которая должна использоваться. Это, в свою очередь, увеличивает код, когда не хватает регистров.

Как правило, 64-битный код x86 выполняется примерно на 5-15% быстрее без каких-либо изменений в реальных алгоритмах, и обычно имеет. Иногда алгоритмы могут быть изменены, чтобы получить гораздо больше [потому что, например, у вас может быть массив, который индексируется по «телефонному номеру», вместо хеширования номера телефона и последующей индексации по хешу, или вместо этого используя 64-битные целочисленные значения 32-разрядных, что означает ускорение в 2 раза для «вдвое меньше операций»].

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

Короче говоря: в большинстве случаев 64-разрядные приложения работают быстрее, чем 32-разрядные приложения, выполняющие то же самое.

10

Другие решения

Самый важный пример использования — это когда вы действительно хотите использовать больше 2 гигабайт памяти для вашего процесса.

Следующее, что 32-битная поддержка будет постепенно уменьшаться, точно так же, как вы не увидите много 16-битных приложений сейчас. Это медленный процесс, хотя. В настоящее время существует одна версия Windows Server 2008, которая по умолчанию не поддерживает 32-разрядную версию.

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

6

  • Физическая память

32-разрядная архитектура системы может напрямую адресовать только адресное пространство размером 4 ГБ. 64-разрядная архитектура системы, работающая под управлением 64-разрядной версии Windows Server, может поддерживать до 1024 ГБ как физической, так и адресуемой памяти.

  • Лучшая параллельная обработка

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

  • Быстрая архитектура автобуса

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

4

Размер типов данных автоматически не удваивается с x64, но размер процессоров регистрируется, как и размер указателя. С 32 битами вы можете адресовать 4294967295 байт памяти (~ 4 Гб), чего не хватает для некоторых приложений (таких как системы управления базами данных, …).

Firefox доступен только в 32-разрядной версии из-за проблем совместимости. Вы не можете писать библиотеки для x86 (32-разрядных) архитектур и вызывать их из процессоров x64, потому что их указатели несовместимы (как описано выше). Создание обоих: x64 а также x86 версии увеличивают расходы на тестирование. Если ваше приложение редко использует больше 3,5 Гб памяти, то оно фактически не выигрывает от архитектуры x64.

Также 32-битные программы не могут просто работать на архитектурах x64. В Windows есть слой для этого, называемый Windows на Windows (WoW), или WoW64 для интерфейсов x64 / x86. В различных случаях кэширования может также случиться, что приложение x86 на самом деле быстрее работает в WoW, чем собственное приложение x64, делая то же самое.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector