32-битные и 64-битные системы


224

Каковы различия между 32-битными и 64-битными системами?

Если вы использовали оба из них, какие острые различия вы испытали?

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


Здесь и во многих других местах возникает путаница между физической адресацией (доступом к оперативной памяти), на которую влияет PEA, материнской платой и логической адресацией (виртуальная память на процесс). В 32-разрядной ОС виртуальная память ограничена 4 ГБ минус то, что резервирует ядро. Он не зависит от ОЗУ, у вас может быть ОЗУ 0,1 МБ или 8 ГБ, и у вас будет ровно 4 ГБ виртуальной памяти (но некоторые зарезервированы ядром). PEA может использоваться, чтобы иметь больше оперативной памяти, но это не идеальный ответ, так как ядро ​​не может получить доступ ко всему этому.
Ctrl-Alt-Delor

Ответы:


264

Примечание. Эти ответы относятся к стандартным процессорам ПК на базе x86 (Intel и AMD) и Windows (как правило, настраиваются для конечных пользователей). Другие 32-разрядные или 64-разрядные микросхемы, другие ОС и другие конфигурации ОС могут иметь различные компромиссы.

С технической точки зрения 64-битная ОС дает вам:

  • Позволяет отдельным процессам обращаться к более чем 4 ГБ ОЗУ каждый (на практике большинство, но не все 32-разрядные ОС также ограничивают общий объем используемой оперативной памяти системы менее 4 ГБ, а не только максимум для каждого приложения).

  • Все указатели занимают 8 байтов вместо 4 байтов. Влияние на использование ОЗУ минимально (поскольку маловероятно, что приложение будет заполнено гигабайтами указателей), но в худшем теоретическом случае это может сделать кэш-память ЦП способной удерживать в 1/2 раза больше указателей (делая это будет эффективно 1/2 размера). Для большинства приложений это не так уж важно.

  • В 64-битном режиме гораздо больше регистров ЦП общего назначения. Регистры являются самой быстрой памятью во всей вашей системе. В 32-битном режиме есть только 8 и 16 регистров общего назначения в 64-битном режиме. В написанных мной приложениях для научных вычислений я наблюдал повышение производительности на 30% за счет перекомпиляции в 64-битном режиме (мое приложение действительно могло использовать дополнительные регистры).

  • Большинство 32-разрядных ОС позволяют отдельным приложениям использовать только 2 ГБ ОЗУ, даже если у вас установлено 4 ГБ. Это связано с тем, что оставшиеся 2 ГБ адресного пространства зарезервированы для обмена данными между приложениями, с ОС и для связи с драйверами. Windows и Linux позволят вам изменить этот компромисс до 3 ГБ для приложений и 1 ГБ для общего доступа, но это может вызвать проблемы для некоторых приложений, которые не ожидают изменений. Я также предполагаю, что это может нанести вред видеокарте с 1 ГБ ОЗУ (но я не уверен). 64-разрядная ОС может дать отдельным 32-разрядным приложениям более полные 4 ГБ для игры.

С точки зрения пользователя:

  • Скорость приложения обычно выше для 64-разрядного приложения в 64-разрядной ОС по сравнению с 32-разрядной версией приложения в 32-разрядной ОС, но большинство пользователей не увидят этого ускорения. Большинство приложений для обычных пользователей на самом деле не используют дополнительные регистры, или преимущества компенсируются большими указателями, заполняющими кэш.

  • Если у вас есть приложения для захвата памяти (такие как редакторы фотографий, обработка видео, научные вычисления и т. Д.), Если у вас есть (или вы можете купить) более 3 ГБ ОЗУ, и вы можете получить 64-разрядную версию приложения, Выбор прост: используйте 64-битную ОС.

  • Некоторое оборудование не имеет 64-битных драйверов. Проверьте свою материнскую плату, все подключаемые карты и все USB-устройства перед выполнением переключения. Обратите внимание, что на заре Windows Vista было много проблем с драйверами. В наши дни все в целом лучше.

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

  • Вы можете запускать 32-битные приложения (но не драйверы) в 64-битной Windows без проблем. Наихудшее замедление, которое я измерил для 32-разрядного приложения в 64-разрядной Windows, составляет около 5% (это означает, что если на выполнение 32-разрядной Windows потребовалось 60 секунд, потребуется не более 60 * 1,05 = 65 секунд с то же самое 32-битное приложение в 64-битной Windows).

Что 32-битный против 64-битный не означает:

В системах x86 32-битные и 64-битные напрямую относятся к размеру указателей. Вот и все.

  • Это не относится к размеру C intтипа. Это зависит от конкретной реализации компилятора, и большинство популярных компиляторов выбирают 32-битные intв 64-битных системах.

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

  • Это не относится непосредственно к размеру шины физического адреса. Например, системе с 64-разрядными строками кэша и максимум 512 ГБ памяти требуется только 33 бита в ее адресной шине (то есть log2(512*1024**3) - log2(64) = 33).

  • Это не относится к размеру физической шины данных: это больше связано с производственными затратами (количеством контактов в сокете ЦП) и размерами линий кэша.


8
Очень хороший ответ Тем более, что вы заметили, что на самом деле существует не ограничение в 4 ГБ ОЗУ, а ограничение использования памяти процессом. Просто для вашей информации, я думаю, вы должны взглянуть на эту ссылку: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Прорыв

8
Это приложения, которые не работают в 64-битных окнах: 16-битные приложения / те, которые используют 32-битные или неподписанные драйверы режима ядра. Это много для наркомана, как я ...
fluxtendu

1
@flextendu, учитывая требования к производительности этих старых программ, вы почти наверняка сможете запустить их на виртуальной машине. При наличии проигрывателя VMware, Virtual PC и Virtual Box, нет никаких причин не опробовать один из них, если у вас есть лицензия на 32-битную версию Windows. Если вы не хотите возиться с этим, они, вероятно, будут работать и в «режиме Windows XP».
Марк Бут

6
Кстати, 32-разрядные приложения не будут использовать более 2 ГБ ОЗУ, если в их манифесте не указан определенный флаг. Источник: blogs.technet.com/b/markrussinovich/archive/2008/11/17/…
Hello71

Да, я уверен, что Hello71 натолкнулся на что-то очень важное, что здесь не рассматривается: большинство 32-битных приложений никогда не будут напрямую использовать преимущества дополнительной оперативной памяти. Я думаю, это стоит упомянуть, нет?
Джанго Рейнхардт

107

В принципе, вы можете сделать все в большем масштабе:

  1. ОЗУ на ОС: ограничение ОЗУ 4 ГБ на платформе x86 для ОС (в большинстве случаев)
  2. ОЗУ на процесс: ограничение ОЗУ 4 ГБ на процессоре x86 для процессов (всегда). Если вы считаете, что это не важно, попробуйте запустить приложение, интенсивно использующее базу данных MSSQL. Он будет использовать более 4 Гб, если он у вас есть, и работать намного лучше.
  3. Адреса: Адреса 64-битные, а не 32-битные, что позволяет вам иметь «большие» программы, которые используют больше памяти.
  4. Дескрипторы, доступные для программ: Вы можете создавать больше файловых дескрипторов, процессов, ... Например, в Windows x64 вы можете создать> 2000 потоков на процесс, но на x86 приблизиться к нескольким сотням.
  5. Доступны более широкие программы: с x64 вы можете запускать как x86, так и x64 программы. (Пример windows: wow64, windows32 на эмуляции windows64)
  6. Варианты эмуляции: с x64 вы можете запускать виртуальные машины x86 и x64.
  7. Быстрее: некоторые вычисления выполняются быстрее на 64-битном процессоре
  8. Разделение нескольких системных ресурсов. Большое количество оперативной памяти очень важно, если вы хотите запустить хотя бы одну виртуальную машину, которая разделяет системные ресурсы.
  9. Доступны эксклюзивные программы: несколько новых программ поддерживают только x64. Пример Exchange 2007.
  10. Будущий устаревший x86 ?: Со временем будет использоваться все больше и больше 64-битных и все больше и больше x86 не будет использоваться. Таким образом, производители будут поддерживать только 64-битные и более.

Два больших типа 64-битных архитектур - это архитектуры x64 и IA64. Но x64 - самый популярный на сегодняшний день.

x64 может выполнять команды x86, а также команды x64. IA64 также выполняет команды x86, но не поддерживает расширения SSE. На Itanium выделено оборудование для запуска инструкций x86; это эмулятор, но аппаратно.

Как упомянул @Phil, вы можете глубже понять, как это работает здесь .


1
Um. IA64 выполняет команды x86. Это не делает расширения SSE, все же. На Itanium выделено оборудование для запуска инструкций x86; это эмулятор, но аппаратно.
tzot

2
Несколько лет назад Рэймонд Чен написал о «пределе» темы
bk1e

Upvote для Arstechnica для их объяснения.
Авиу Турцион

2
Ограничение оперативной памяти в 4 ГБ не совсем верно (это скорее искусственный предел, установленный для домашних пользователей Windows-систем), проверьте PAE . На самом современном оборудовании ядро ​​Linux PAE (которое по умолчанию используется для 32-битных систем) может нормально обрабатывать более 4 ГБ. То же относится и к FreeBSD и NetBSD.
Иззи

32-разрядные системы не могут использовать более 4 ГБ (1-й пункт) из-за этих «адресов» (3-й пункт). Поскольку наибольшее 32-разрядное число составляет 4,294,967,296 (= 4 ГБ). Таким образом, ваши 1-й и 3-й пункт одинаковы. Вы можете удалить 3-й пункт. :)
Jet

46

Наибольшее влияние, которое люди заметят в данный момент, заключается в том, что 32-битный ПК может обрабатывать максимум 4 ГБ памяти. Когда вы снимаете память, выделенную для другого использования операционной системой, ваш компьютер, вероятно, будет показывать только около 3,25 ГБ используемой памяти. Перейдите на 64 бита, и этот предел исчезнет.

Если вы занимаетесь серьезным развитием, это может быть очень важно. Попробуйте запустить несколько виртуальных машин, и вам скоро не хватит памяти. Серверы с большей вероятностью будут нуждаться в дополнительной памяти, поэтому вы обнаружите, что использование 64-битных систем на серверах намного больше, чем на настольных ПК. Закон Мура гарантирует, что у нас будет больше памяти на компьютерах, и поэтому в некоторых случаях настольные компьютеры также будут переключаться на 64-битные в качестве стандарта.

Более подробное описание различий в процессорах можно найти в этой замечательной статье от ArsTechnica .


7
32-разрядная платформа и ограничение в 4 ГБ несколько ошибочны и являются (были) в основном архитектурным ограничением выбора / дизайна операционной системы. Действительно, 4 ГБ из 32-битных систем действительно ограничены в пространстве виртуальных процессов. Физический адрес поддерживает 36-бит на 32-битных процессорах Intel
Tall Jeff

1
Вы делаете хорошее замечание, которое, безусловно, верно. Но реальное влияние на пользователей ПК заключается в том, что машина не будет использовать все 4 ГБ, за которые они заплатили. У моего папы была эта проблема, и он все еще не уверен, что 4 ГБ, за которые он заплатил, не могут быть полностью использованы.

2
Цените вашу точку зрения, но просто пытаясь понять, что исправление не в процессоре или идет в 64-битной среде, это просто вопрос немного улучшенного дизайна ОС. Это решается, например, в корпоративных версиях Windows, даже в 32-разрядных версиях. Это позволяет 64 ГБ оперативной памяти.
Высокий Джефф

Технически, предел не исчезает. Он перемещается дальше туда, где практически невозможно / невозможно установить столько оперативной памяти на машину в любое время в течение следующего десятилетия или около того.

См. Мое замечание о PAE выше: ограничение в 4 ГБ не относится ко всей системе - оно применимо только к отдельным процессам (ни один процесс не может получить доступ к 4 ГБ и самому себе), но вся система, то есть все процессы вместе, может с включенным PAE ). Таким образом, если у вас не установлены приложения, которые могут получить доступ к 4 ГБ и более (например, видеоредакторы / конвертеры с большими видеофайлами) и 8 ГБ +, это не должно иметь большого значения, будь то использование 32-разрядного или 64-разрядного.
Иззи

31

Нет ничего бесплатного: хотя 64-битные приложения могут получить доступ к большему объему памяти, чем 32-битные, недостатком является то, что им нужно больше памяти. Все те указатели, которые раньше требовали 4 байта, теперь им нужно 8. Например, требование по умолчанию в Emacs на 60% больше памяти, когда он построен для 64-битной архитектуры. Эта дополнительная нагрузка снижает производительность на всех уровнях иерархии памяти: большие исполняемые файлы загружаются с диска дольше, большие рабочие наборы вызывают больше подкачки, а большие объекты означают меньшее размещение в кэшах процессора. Если вы подумаете о ЦП с 16K-кешем L1, 32-разрядное приложение может работать с 4096 указателями, прежде чем оно пропустит и перейдет в кэш L2, но 64-разрядное приложение должно получить доступ к кэшу L2 после всего лишь 2048 указателей.

На x64 это смягчается другими архитектурными улучшениями, такими как большее количество регистров, но на PowerPC, если ваше приложение не может использовать> 4G, оно может работать быстрее на «ppc», чем «ppc64». Даже на Intel есть рабочие нагрузки, которые работают быстрее на x86, и немногие работают на 5% быстрее на x64, чем на x86.


2
Этот ответ предполагает, что PowerPC64 не так хорош, как x86-64. Правда в том, что powerpc64 не улучшил powerpc, так как powerpc не был сломан.
Ctrl-Alt-Delor

3
Linux теперь имеет x32 ABI со всеми преимуществами скорости x86-64 (больше регистров, переработанный ABI), но с 32-битными указателями. +1 за то, что указывает на то, что преимущества 64-битного режима не в фактическом увеличении ширины, а в возможности отбросить большую часть багажа, который сдерживал архитектуру. 64-битные регистры имеют значение для некоторых приложений, но 64-битное пространство указателя требуется реже.
Питер Кордес

19

64-битная ОС может использовать больше оперативной памяти. Вот и все, на практике. В 64-битной Vista / 7 используются более совершенные функции безопасности для размещения жизненно важных компонентов в ОЗУ, но это не так «заметно» как таковое.

От ChrisInEdmonton:

32-разрядная операционная система в системе ix86 с PAE может адресовать до 64 ГБ ОЗУ. 64-разрядная операционная система на x86-64 может получить доступ к 256 ТБ виртуального адресного пространства, хотя это может быть увеличено в последующих процессорах, до 16 EB. Обратите внимание, что некоторые операционные системы еще больше ограничивают адресное пространство, и большинство материнских плат будут иметь дополнительные ограничения.


4
Для ОС 32-разрядный или 64-разрядный относится ТОЛЬКО к размеру указателей (что правильно обсуждается в первом параграфе). -1: некоторые ОС предпочитают фиксировать целочисленный размер по умолчанию для размера указателя, но ни Windows, ни Linux не делают этого. Целочисленная математическая точность неизменна. НИКАКАЯ широко используемая ОС не изменяет точность с плавающей запятой (о чем говорится во втором абзаце). «float» или «single» - 32-битные, «double» - 64-битные, независимо от того, использует ли ОС 32-битные или 64-битные указатели.
Мистер Фуз

Ах, я явно ошибся, спасибо за
разъяснение

Нет проблем. -1 -> +1
мистер Фуз

Возможно, стоит отредактировать ваш ответ, чтобы указать, сколько оперативной памяти может быть доступно. 32-разрядная операционная система в системе ix86 с PAE может адресовать до 64 ГБ ОЗУ. 64-разрядная операционная система на x86-64 может получить доступ к 256 ТБ виртуального адресного пространства, хотя это может быть увеличено в последующих процессорах, до 16 EB. Обратите внимание, что некоторые операционные системы еще больше ограничивают адресное пространство, и большинство материнских плат будут иметь дополнительные ограничения.
ChrisInEdmonton

Я хотел, чтобы все было просто, потому что цифры в основном достаточно высоки, чтобы быть неактуальными на данный момент, но не повредит их вставить сейчас.
Фоши

14

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

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

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

Фундаментальная «большая проблема» на 64-битной системе заключается в том, что вы получаете доступ к гораздо большему адресному пространству памяти, чем 32-битная. Это означает, что вы действительно можете использовать более 4 ГБ памяти на вашем компьютере, и это действительно поможет.

Я уверен, что другие ответы будут вдаваться в детали и выгоды больше, чем я.

С точки зрения обнаружения различий, то программно вы просто проверяете размер указателя (например, sizeof (void *)). Ответ 4 означает его 32 бита, а 8 означает, что вы работаете в 64-битной среде.


4
Если вы пишете программы, которые случайно предполагают, что определенные типы указателей имеют тот же размер, что и определенные целочисленные типы, сделайте это. Это было правдой долгое время.
Дэвид Торнли

@ Дэвид: Вы абсолютно правы. К сожалению, существует масса кода, который делает именно это.

10

32-битный процесс имеет виртуальное адресное пространство 4 ГБ; это может быть слишком мало для некоторых приложений. 64-битное приложение имеет практически неограниченное адресное пространство (конечно, оно ограничено, но вы, скорее всего, не достигнете этого предела).

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

Также вы получаете прирост производительности при работе с переменными "long long int" (64-битные переменные, такие как uint64_t). 32-битный ЦП может добавлять / делить / вычитать / умножать два 64-битных значения, но не в одной аппаратной операции. Вместо этого необходимо разделить эту операцию на две (или более) 32-битные операции. Таким образом, приложение, которое хорошо работает с 64-битными числами, получит прирост скорости, поскольку сможет выполнять 64-битную математику напрямую в аппаратном обеспечении.

И последнее, но не менее важное: архитектура x86-64 предлагает больше регистров, чем классические архитектуры x86. Работа с регистрами намного быстрее, чем работа с ОЗУ, и чем больше регистров у процессора, тем реже ему приходится менять значения регистров в ОЗУ и обратно в регистры.

Чтобы узнать, может ли ваш процессор работать в 64-битном режиме, вы можете посмотреть на различные переменные sysctl. Например, откройте терминал и введите

sysctl machdep.cpu.extfeatures

Если в нем указан EM64T, ваш процессор поддерживает 64-битное адресное пространство в соответствии со стандартом x86-64. Вы также можете искать

sysctl hw.optional.x86_64

Если он говорит 1 (истина / включен), ваш процессор поддерживает битовый режим x86-64, если он говорит 0 (ложь / отключен), это не так. Если настройка вообще не найдена, считайте ее ложной.

Примечание. Вы также можете извлекать переменные sysctl из нативного приложения C, не используя инструмент командной строки. Видеть

man 3 sysctl

ошибка: «machdep.cpu.extfeatures» является неизвестным ключом

Я полагаю, это не называется EM64T, если вам не повезло иметь Intel.

9

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

Некоторые из вещей, упомянутых в этом потоке (например, удвоение # регистров), применимы только к x86-> x86_64, но не к 64-битным в общем. Так же, как тот факт, что под x86_64 гарантированно есть SSE2, 686 кодов операций и дешевый способ сделать PIC. Эти функции строго не о 64-битной, а о сокращении устаревших и исправлении известных ограничений x86

Более того, довольно часто люди указывают на удвоение регистров как причину ускорения, в то время как более вероятно использование SSE2 по умолчанию, которое добивается цели (ускорение memcpy и подобных функций). Если вы включите тот же набор для x86, разница будет намного меньше. (*) (***)

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

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

В целом, мои простые тесты показывают, что они будут грубо уравновешивать друг друга, если драйверы и библиотеки времени выполнения полностью адаптированы, не давая значительной разницы в скорости для среднего приложения. Однако некоторые приложения могут внезапно работать быстрее (например, в зависимости от AES) или медленнее (критическая структура данных постоянно перемещается / сканируется / перемещается и содержит много указателей). Тем не менее, тесты проводились на Windows, поэтому оптимизация PIC не проводилась.

Обратите внимание, что большинство языков JIT-VM (Java, .NET) в среднем используют (в основном) больше указателей, чем, например, C ++. Вероятно, их использование памяти увеличивается больше, чем для средней программы, но я не смею приравнивать это непосредственно к замедляющим эффектам (так как это действительно сложный и забавный зверь, который часто трудно предсказать без измерения)

В 64-разрядной версии Windows по умолчанию используется SSE2 для операций с плавающей запятой, что ускоряет выполнение простых операций и замедляет сложные операции (sin, cos и т. Д.).

(*) малоизвестный факт - число регистров SSE также удваивается в 64-битном режиме

(**) У доктора Доббса была хорошая статья об этом несколько лет назад.


8

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

Взгляните на Том 4, предисловие 1А, чтобы найти примеры классных трюков, о которых я говорю.


7

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

Архитектура x86_64 обратно совместима с x86. Можно запускать немодифицированные 32-битные операционные системы. Также возможно запускать немодифицированное 32-битное программное обеспечение из 64-битной ОС. Для этого потребуются все обычные 32-битные библиотеки. Возможно, они должны быть установлены отдельно.


Больше регистров и переработанный ABI (передача аргументов функции в регистр) обычно ускоряет на 10-15%, что вполне прилично. Сейчас существует x32 Linux ABI с 32-битными указателями, но с длинным режимом amd64 и соглашениями о вызовах args-in-registers. Таким образом, у вас есть все преимущества скорости в amd64, но без дополнительных затрат на 64 бита для каждого указателя. Это хорошо для всего, что не требует> 4 ГБ (виртуальной) памяти.
Питер Кордес

6

Эта тема уже слишком длинная, но ...

Большинство ответов сосредоточены на том факте, что у вас больше 64-битное адресное пространство, поэтому вы можете адресовать больше памяти. Для примерно 99% всех приложений это совершенно не имеет значения. Большой возглас

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

Кроме того, были определены соглашения о вызове / вызове подпрограммы для 64-битной системы, чтобы сохранить большинство переданных параметров в регистрах вместо того, чтобы вызывающий элемент помещал их в стек, а вызываемый объект их выводил.

Таким образом, «типичное» C / C ++ приложение получит повышение производительности примерно на 10% или 15%, просто перекомпилировав для 64-битной версии. (Предполагая, что некоторая часть приложения была связана с вычислениями. Конечно, это не гарантировано; Все компьютеры ожидают с одинаковой скоростью. Ваш пробег может изменяться.)


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

David, Наборы команд x64 и x86 практически идентичны, за исключением размера операнда и некоторых префиксов регистров. С IA64, он же Itanium, он же Itanic, 64-битные коды, как правило, будут в 3 раза больше кодов x86 и будут загружать кэш инструкций точно так, как вы говорите. Это было важным фактором, почему эта архитектура с треском провалилась. Но с x86, то есть AMD64 или EM64T, этот рост кода обычно составляет всего 10-20%.

Хотя x64 делает больше регистров адресуемым , я не уверен, насколько он фактически увеличивает количество доступных физических регистров - все последние процессоры x86 имеют много (> 100) «теневых» регистров и используют «переименование регистров» + умозрительное выполнение чтобы позволить независимым путям кода выполняться параллельно в определенной степени. Фактически, если выполняется n независимых кодовых путей, доступно n раз больше регистров (пока не закончатся все теневые регистры).

@j_random_hacker. Вы абсолютно правы, что эти трюки происходят под архитектурой. Но независимо от того, сколько теневых регистров доступно, если программе нужно работать с более чем 8 элементами данных и только 8 регистров представлены в наборе команд, компилятор должен сгенерировать инструкции сохранения / перезагрузки. Так что да, X64 действительно делает вдвое больше «доступных» регистров

Мой опыт показывает, что это намного меньше и компенсируется тем фактом, что средняя длина перемещаемой мембраны больше.
Марко ван де Воорт

6

Помимо уже упомянутых преимуществ здесь есть еще несколько в отношении безопасности:

  • У процессоров x86_64 в таблицах страниц есть бит no-execute. Т.е. это может предотвратить атаки безопасности, вызванные переполнением буфера. 32-битный процессор x86 поддерживает эту функцию только в режиме PAE.
  • Увеличенное адресное пространство обеспечивает лучшую рандомизацию размещения адресного пространства (ASLR), что затрудняет использование переполнений буфера.
  • Процессор x86_64 имеет независимый от позиции код, т. е. доступ к данным относительно регистра указателя команд (RIP).

Еще одно преимущество, которое приходит на ум, заключается в том, что объем виртуальной непрерывной памяти, выделяемой vmalloc()в ядре Linux, может быть больше в 64-битном режиме.


5

На 32-битной машине у вас есть только 4 294 967 295 байт памяти для адресации. На 64-битной машине у вас 1,84467441 × 10 ^ 19 байт памяти.

Википедия говорит это

64-разрядные процессоры вычисляют конкретные задачи (например, факториалы больших чисел) в два раза быстрее, чем работа в 32-разрядных средах (данный пример получен из сравнения между 32-разрядным и 64-разрядным Windows Calculator; заметно для факториала, скажем, 100 000 ). Это дает общее представление о теоретических возможностях 64-битных оптимизированных приложений.

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

64-битные виртуальные машины Java Sun запускаются медленнее, чем их 32-битные виртуальные машины, потому что Sun реализовал «серверный» JIT-компилятор (C2) только для 64-битных платформ. [9] «Клиентский» JIT-компилятор (C1), который производит менее эффективный код, но компилируется гораздо быстрее, недоступен на 64-битных платформах.

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


2
Длина шины физического адреса не зависит от того, является ли это 32- или 64-разрядным процессором. Некоторые 32-разрядные процессоры имеют адресные шины более 32 бит, и ни один 64-разрядный процессор не имеет 64-разрядной адресной шины.

1
Согласовано. Теоретически адресное пространство составляет 2 ^ 64. На практике производители процессоров используют меньшие значения ... как 2 ^ 40 или 2 ^ 48.
Стю Томпсон

5

Цитата из Microsoft.com:

В следующей таблице увеличенные максимальные ресурсы компьютеров, основанных на 64-битных версиях Windows и 64-битном процессоре Intel, сравниваются с существующими 32-битными максимумами ресурсов.

МС-таблица


2
Интересно, но стоит отметить, что некоторые 32-разрядные версии Windows допускают больше физической памяти. См., Например, en.wikipedia.org/wiki/…
ChrisInEdmonton

@ChrisInEdmonton система поддерживает более 4 ГБ или памяти, но адрес для каждого процесса по-прежнему ограничен 2 ГБ (3 ГБ с поддержкой большого адреса). Таким образом, даже если ваша система имеет много памяти, она все равно не помогает программам, которые занимают много памяти, а производительность по-прежнему отстает от 64-битной версии. Кроме того, он имеет гораздо меньший диапазон адресов для ASLR и отображенного в память файла
phuclv

4

Кристоф и Поши заявили, что основные технические различия между 32- и 64-битными ОС «пользовательский опыт обычно сильно отличается от теории». На сегодняшний день 64-разрядные потребительские версии Windows (XP и Vista) имеют большие дыры в поддержке драйверов. У меня было много принтеров, сканеров и других внешних устройств, которые не работали с 64-битными версиями, которые прекрасно работают с 32-битными версиями. Это устройства с 64-разрядными драйверами, и они по-прежнему не будут работать. На этом этапе я бы порекомендовал вам держаться подальше от всего, что основано на потребителях, то есть от 64-разрядной версии от Microsoft, пока вы не услышите о том, как Windows 7 справляется с этим, от реальных конечных пользователей, а не только от фанатов, которые в настоящее время имеют к нему доступ. Дайте ему как минимум 6 месяцев и посмотрите, что испытывают люди.


Водителей может быть меньше, но на самом деле это не так плохо, как звучит. Я использую 64 бита с 2007 года и никогда не испытывал никаких трудностей. Сказав это, я не имею никаких неизвестных или древних устройств, связанных.
RomanSt

1
Мой последний из них с Vista 64 bit был совершенно новым многофункциональным принтером HP только в прошлом месяце на двухмесячной системе Dell. И Dell, и HP сдались, и мой клиент заплатил мне, чтобы я перешел на XP Pro и избавился от Vista. Ничего неясного ни в одном из подразделений.
Кевин К

1
Обычно, если вы покупаете компьютер с 64-битной ОС, все будет работать. Я был бы осторожен, прежде чем пытаться обновить старый компьютер, или если бы у меня был старый принтер, или если бы я хотел обновить самостоятельно.
Дэвид Торнли

Оборудование, которое хочет маркировать Works with Windows или Certified для использования с логотипами Windows, должно предлагать 64-битные драйверы. Может быть, искать это в следующий раз. Но на самом деле, иногда поставщики не заботятся о потребительском оборудовании, поскольку большинство потребителей, вероятно, все еще будут работать на 32-разрядной версии.
Джои

2

Некоторые игровые программы используют представление битовой доски . Шахматы, шашки и Отелло, например, имеют доску 8x8, то есть 64 квадрата, поэтому наличие как минимум 64 битов в машинном слове значительно повышает производительность.

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


2

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

скорость может быть разной на мой взгляд


1

Еще один момент, связанный с Microsoft Windows, заключается в том, что в течение многих лет существовал Win32 API, который предназначен для 32-разрядных операционных систем и не оптимизирован для 64-разрядной компиляции. Когда я пишу несколько DLL для своих приложений, я обычно компилирую в Win32, который не является 64-битной версией вещей. До Vista не было много успешных 64-битных версий Windows, я считаю, что там, где я работаю, моя новая машина имеет 4 ГБ ОЗУ, но я все еще использую 32-битную Windows XP Pro, поскольку это известная стабильная операционная система. S относительно XP64 или Vista.

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

Изменение размера адреса может иметь серьезные последствия и последствия.


1

Для большинства практических целей вы, вероятно, не заметите разницу.

Для установки 64-разрядной операционной системы у вас должен быть 64-разрядный процессор (большинство процессоров за последние несколько лет).

У 64-битной операционной системы есть несколько преимуществ:

  • Это позволит вам использовать более 4 ГБ ОЗУ (максимальное число, которое вы можете адресовать в 32-разрядной ОС, составляет 2 ^ 32 = 4 ГБ)
  • Это полезно для работы с большими наборами данных (например, в Excel) и некоторыми вычислительными задачами (например, Photoshop и большие файлы)
  • Вы можете запустить только 64-битную программу на 64-битной ОС, но вы можете запустить 32-битную программу на обеих (имейте в виду, что многие программы выполняются как обе, так что не так уж много 64-битных программы).

В большинстве случаев 64-разрядные программы используют немного больше памяти, но для персонального компьютера это обычно не замечается.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.