32-разрядные и 64-битные системы

В чем разница между 32-битными и 64-битными системами?

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

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

  • Возможно ли, чтобы процессор x86 соответствовал процессору ARM с точки зрения производительности на ватт?
  • Как определить, является ли текущая версия Windows 32-разрядной или 64-разрядной из командной строки?
  • В чем основное различие между поколениями процессоров Intel?
  • Почему более новые поколения процессоров работают быстрее с одинаковой тактовой частотой?
  • Почему Windows 7 не может быть установлена ​​на базе ARM-процессора?
  • «Регистр процессора» и «Регистр ввода-вывода»
  • Зачем нам нужно несколько уровней кеш-памяти?
  • Как включить PAE в Windows 7 (32-разрядная версия) для поддержки более 3,5 ГБ оперативной памяти?
  • 7 Solutions collect form web for “32-разрядные и 64-битные системы”

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

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

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

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

    • В 64-битном режиме имеется много других регистров центрального процессора. Регистры – это самая быстрая память в вашей системе. В 64-битном режиме есть только 8 в 32-битном режиме и 16 регистров общего назначения. В научных вычислительных приложениях, которые я написал, я видел повышение производительности на 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 было много проблем с драйверами. В наши дни все лучше.

    • Если вы запускаете так много приложений за раз, что у вас заканчивается RAM (обычно вы можете это сказать, потому что ваш компьютер начинает очень медленно, и вы слышите хруст жесткого диска), тогда вам понадобится 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 ).

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

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

    1. ОЗУ на операционную систему: ограничение RAM на 4 ГБ на x86 для ОС (большую часть времени)
    2. ОЗУ на процесс: предел RAM 4 ГБ на x86 для процессов (всегда). Если вы считаете, что это не важно, попробуйте запустить огромное приложение для работы с базами данных MSSQL. Он будет использовать> 4 ГБ, если у вас он есть и работает намного лучше.
    3. Адреса: Адреса – 64 бит вместо 32 бит, что позволяет вам иметь «большие» программы, которые используют больше памяти.
    4. Ручки доступны для программ: вы можете создавать больше дескрипторов файлов, процессов, … Пример в Windows x64 вы можете создать> 2000 потоков для каждого процесса, но на x86 ближе к нескольким сотням.
    5. Доступны более широкие программы: с x64 вы можете запускать как x86, так и x64 программы. (Примеры окон: 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, вы можете получить более глубокий взгляд на то, как он работает здесь .

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

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

    Для более подробного описания различий в процессорах ознакомьтесь с этой замечательной статьей от ArsTechnica .

    Ничто не является бесплатным: хотя 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.

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

    От ChrisInEdmonton:

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

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

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

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

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

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

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

    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. Работа с регистрами выполняется намного быстрее, чем работа с ОЗУ, и чем больше регистров CPU, тем реже приходится менять значения регистров в ОЗУ и обратно в регистры.

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

     sysctl machdep.cpu.extfeatures 

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

     sysctl hw.optional.x86_64 

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

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

     man 3 sysctl 
    Interesting Posts

    Как отсортировать папки по последним символам имени папки в Windows 7?

    Получить путь к открытому файлу в любом приложении в Mac OS X?

    Почему у меня нет права на создание текстового файла в корневом каталоге?

    Полуслучайный щелчок звука от Macbook Pro

    Как добавить «метро», смотрящую плитку для настольного приложения?

    Как загрузить Google Doodle для использования в автономном режиме?

    RPM не удалит установленные каталоги, если они были изменены после первоначальной установки

    FileZilla FTP для AWS EC2 Windows Server 2012 Экземпляр: не удалось получить список каталогов

    Как я могу получить этот хороший индикатор строки в Outlook 2010 при ответе на электронные письма?

    Двойная загрузка ubuntu с окнами 8

    Avahi: ping не может разрешить имя хоста, но nslookup может

    Как программировать MKV с субтитрами?

    Настольный ПК не активируется

    Перенаправление IP-IP

    Не вредно ли подключать источник данных с питанием POE к карте, отличной от POE?

    Давайте будем гением компьютера.