Процессор, операционная система :32-битный, 64-битный

StackOverflow https://stackoverflow.com/questions/1283797

Вопрос

Я новичок в программировании и имею образование, не связанное с CS (без формальной степени).В основном я программирую winforms с использованием C #.

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

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

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

Редактировать: Я читал такие вещи, как В 32-разрядном режиме они могут получить доступ к памяти объемом до 4 ГБ;в 64-разрядном режиме они могут получить доступ к гораздо большему....Я хочу знать, ПОЧЕМУ ко всем таким вещам.

ЩЕДРОСТЬ:Приведенные ниже ответы действительно хороши .... особенно один от Мартина.Но я смотрю на подробное объяснение, но на простом английском языке.

Это было полезно?

Решение

На самом деле все сводится к проводам.

В цифровых схемах только 0 и 1 (обычно низкое и высокое напряжение) могут передаваться от одного элемента (центрального процессора) к другому элементу (микросхеме памяти).Если у меня есть только 1 провод, я могу отправлять по проводу только 1 или 0 за такт.Это означает, что я могу адресовать только 2 байта (предполагая байтовую адресацию, и что целые адреса передаются всего за 1 цикл для повышения скорости!).

Если у меня есть 2 провода, я могу адресовать 4 байта.Потому что я могу отправить:(0, 0), (0, 1), (1, 0), или (1, 1) по двум проводам.Таким образом, в основном это 2 к мощности # of wires.

Таким образом, если у меня 32 провода, я могу адресовать 4 ГБ, а если у меня 64 провода, я могу адресовать намного больше.

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

Отредактировал мои комментарии сюда (неотредактированные) ;) И сделаю это вики, если у кого-нибудь тоже есть что добавить интересного.

Как упоминалось в других комментариях, 2 ^ 32 (2 в степени 32) = 4294967296, что составляет 4 ГБ.А 2 ^ 64 равно 18,446,744,073,709,551,616.Чтобы копнуть глубже (и вы, вероятно, читали это в Hennesey & Patterson), процессоры содержат регистры, которые он использует как "свободное пространство" для хранения результатов своих вычислений.Центральный процессор знает только, как выполнять простую арифметику, и знает, как перемещать данные.Естественно, размер этих регистров имеет ту же ширину в битах, что и "#-bits" архитектуры, поэтому регистры 32-разрядного процессора будут иметь ширину 32 бита, а регистры 64-разрядного процессора будут иметь ширину 64 бита.

Будут исключения из этого правила, когда речь заходит о командах с плавающей запятой (для обработки двойной точности) или других командах SIMD (одна команда, команды с несколькими данными).Центральный процессор загружает и сохраняет данные в основную память (ОЗУ) и из нее.Поскольку центральный процессор также использует эти регистры для вычисления адресов памяти (физической и виртуальной), объем памяти, который он может адресовать, также совпадает с шириной его регистров.Есть несколько процессоров, которые обрабатывают вычисление адресов с помощью специальных расширенных регистров, но те, которые я бы назвал "после размышлений", добавлены после того, как инженеры осознали, что им это нужно.

На данный момент 64-бит - это довольно много для адресации реальной физической памяти.Большинство 64-разрядных процессоров пропускают довольно много проводов, когда дело доходит до подключения процессора к памяти из-за практичности.Не имеет смысла тратить драгоценное пространство материнской платы на прокладку проводов, которые всегда будут иметь значения 0.Не говоря уже о том, что для обеспечения максимального объема оперативной памяти с сегодняшней плотностью DIMM потребуется 4 миллиарда слотов dimm :)

Помимо увеличенного объема памяти, 64-разрядные процессоры обеспечивают более быстрые вычисления для целых чисел, больших 2 ^ 32.Ранее программистам (или компиляторам, которые также программируются программистами ;) приходилось имитировать наличие 64-разрядного регистра, используя два 32-разрядных регистра и обрабатывая любые ситуации переполнения.Но на 64-разрядных процессорах это было бы обработано самим процессором.

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

Другие советы

Давайте попробуем ответить на этот вопрос, посмотрев на Люди против компьютеры;надеюсь, это прольет для вас некоторый свет на некоторые вещи:

Что нужно иметь в виду

  • Какими бы удивительными они ни были, компьютеры очень, очень тупые.

Память

  • У людей есть память (за исключением, возможно, мужей и политиков.) Люди хранят информацию в своей памяти для последующего использования.
    • Задав вопрос (например, "Какой у вас номер телефона?"), человек может получить информацию, чтобы дать ответ (например, "867-5309").
  • Все современные компьютеры имеют память и хранят информацию в своей памяти для последующего использования.
    • Поскольку компьютеры немы, им можно задать только очень конкретный вопрос для извлечения информации:"Какова ценность в X в твоей памяти?"
      • В приведенном выше вопросе, X известен как адрес, который также можно назвать указатель.

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

Числа

  • Люди используют десятичная система счисления.Это означает, что для каждой цифры в десятичном числе цифра может быть одной из 0, 1, 2, 3, 4, 5, 6, 7, 8, или 9.У людей есть десять параметры для каждой цифры.
  • Все современные компьютеры используют двоичная система счисления.Это означает, что для каждой цифры в двоичном числе цифра может быть только 1 или 0.Компьютеры имеют два параметры для каждой цифры.
    • На компьютерном жаргоне одна двоичная цифра называется немного, сокращение от bтщательный рытьеIT.

Адреса

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

32-разрядный v.64-разрядная Адресация

  • Для негибкого (фиксированного) количества цифр (например2 десятичные цифры) возможные числа, которые вы можете представить, называются диапазон (например,от 00 до 99 или 100 уникальных номеров).Добавление дополнительной десятичной цифры умножает диапазон на 10 (например,3 десятичных знака - от 000 до 999, или 1000 уникальных чисел).
  • Это относится и к компьютерам, но поскольку они бинарный машины вместо десятичная дробь машины, добавляющие дополнительную двоичную цифру (немного) увеличивает дальность действия только в 2.

    Диапазоны адресации:
    • 1-разрядная адресация позволяет говорить о 2 уникальных адресах (0 и 1).
    • 2-разрядная адресация позволяет говорить о 4 уникальных адресах (00, 01, 10 и 11).
    • 3-разрядная адресация позволяет говорить о 8 уникальных адресах (000, 001, 010, 011, 100, 101, 110, и 111).
    • и спустя долгое время... 32-разрядная адресация позволяет говорить о 4 294 967 296 уникальных адресах.
    • и после того , как еще дольше пока... 64-разрядная адресация позволяет говорить о 18 446 744 073 709 551 616 уникальных адресах.Это такой МНОГО из памяти!

Последствия

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

Многие современные процессоры могут работать в двух режимах:32-разрядный режим и 64-разрядный режим.В 32-разрядном режиме они могут получить доступ к памяти объемом до 4 ГБ;в 64-разрядном режиме они могут получить доступ к гораздо большему.Более старые процессоры поддерживают только 32-разрядный режим.

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

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

Опять же, выбор размера в первую очередь зависит от объема основной памяти, к которой вы хотите получить доступ.32-разрядные приложения часто ограничены 2 ГБ во многих системах, поскольку системе требуется некоторое адресное пространство для самой себя.

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

Также может возникнуть вопрос, какова стоимость запуска 32-разрядного приложения на 64-разрядном процессоре:на процессорах AMD64 и Intel64 этот режим эмуляции используется в основном аппаратно, поэтому реальной потери производительности при запуске 32-разрядного приложения нет.Это существенно отличается от Itanium, где 32-разрядные (x86) приложения эмулируются очень плохо.

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

На самом деле, на каждой дороге была развилка, за исключением дорог, ведущих к самим домам.Эти дороги просто заканчивались у дома.Ни у одной из дорог не было названий;им не нужны были имена благодаря хитроумной схеме адресации, созданной Комиссией по планированию Бинвилля.Вот карта Бинвилля с указанием дорог и домов:

              ------- []  00
             /
       ------
      /      \
     /        ------- []  01
-----
     \        ------- []  10
      \      /
       ------
             \
              ------- []  11

Как вы можете видеть, у каждого дома есть двузначный адрес.Одного этого адреса достаточно, чтобы а) однозначно идентифицировать каждый дом (повторений нет) и б) рассказать вам, как туда добраться.Видите ли, по городу легко передвигаться.Каждая развилка помечена нулем или единицей, которые Комиссия по планированию называет Индикатором пересечения в Бинвилле, или немного для краткости.Когда вы приближаетесь к первой развилке, посмотрите на первый бит адреса.Если это ноль, идите налево;если это единица, идите направо.Затем посмотрите на вторую цифру, когда доберетесь до второй развилки, поворачивая налево или направо в зависимости от обстоятельств.

Допустим, вы хотите навестить своего друга, который живет в Бинвилле.Она говорит, что живет в доме 10.Когда вы доберетесь до первой развилки Бинвилла, идите направо (1).Затем на второй развилке поверните налево (0).Ты там!

Бинвилл существовал в таком виде несколько лет, но начали распространяться слухи о его идиллическом окружении, великолепной парковой системе и щедром медицинском обслуживании.(В конце концов, если вам не нужно тратить деньги на уличные знаки, вы можете использовать их на более качественные вещи.) Но возникла проблема.Имея всего два бита, схема адресации была ограничена четырьмя домами!

Итак, Комиссия по планированию собрала свои головы вместе и разработала план:они бы добавили немного к каждому адресу, тем самым удвоив количество домов.Чтобы реализовать план, они построили бы новую развилку на окраине города, и все получили бы новые адреса.Вот новая карта, показывающая новую развилку, ведущую в город, и новую часть Бинвилла:

                     ------- []  000
                    /
              ------
             /      \
            /        ------- []  001
       -----                            Old Binville
      /     \        ------- []  010
     /       \      /
    /         ------
   /                \
  /                  ------- []  011
--
  \                  -------     100
   \                /
    \         ------
     \       /      \
      \     /        ------- []  101
       -----                            New Binville (some homes not built yet)
            \        -------     110
             \      /
              ------
                    \
                     -------     111

Вы заметили, что все в оригинальной части Бинвилля просто добавили ноль перед своим адресом?Новый бит представляет новое пересечение, которое было построено.Когда количество битов увеличивается на единицу, количество адресов удваивается.Горожане всегда знали максимальный размер своего города:все, что им нужно было сделать, это вычислить значение двух, возведенное в степень числа битов.Имея три бита, они могли бы иметь 23 = 8 домов.

Прошло несколько лет, и Бинвилл снова был заполнен до отказа.Все больше людей хотели переехать сюда, поэтому был добавлен еще один участок (вместе с необходимым перекрестком), удвоив размер города до шестнадцати домов.Потом еще немного, и еще, и еще...Адреса Binville вскоре были шестнадцатибитными, способными вместить до 216 (16 384) дома, но этого было недостаточно.Люди все прибывали и прибывали!

Итак, Комиссия по планированию решила решить проблему раз и навсегда:они подскочили бы до тридцати двух бит.С достаточным количеством адресов для более чем четырех миллиардов домов (232), конечно, этого было бы достаточно!

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

Столкнувшись с постоянно растущим населением, Комиссия по планированию в очередной раз собралась с мыслями и предложила еще одно расширение города.На этот раз они будут использовать 64 бита.Знаете ли вы, сколько домов сейчас могло бы поместиться в черте города Бинвилл?Это верно:18,446,744,073,709,551,616.Это число настолько велико, что мы могли бы заселить около двух миллиардов Земель и дать каждому его собственный адрес.

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

Будет ли достаточно 64 бит?Кто знает в это время, но жители Бинвилля ждут объявления 128-битных адресов...

Ответ Мартина в основном правильный и подробный.

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

Еще одна вещь, которая не была упомянута, заключается в том, что разница между традиционным процессором x86 и x86-64 заключается не только в размере указателя, но и в наборе команд.Хотя указатели больше и потребляют больше памяти (8 байт вместо 4), это компенсируется большим набором регистров (15 регистров общего назначения вместо 8, iirc), поэтому производительность действительно может быть выше для кода, выполняющего вычислительную работу.

Ответ Мартина превосходен.Просто чтобы добавить несколько дополнительных очков...поскольку вы упомянули .NET, вы должны отметить, что CLI / JIT имеет некоторые различия между x86 и x64, с различными оптимизациями (например, tail-call) и некоторыми незначительными отличиями в поведении продвинутых вещей, таких как volatile.Все это может оказать влияние на ваш код.

Кроме того, не весь код работает на x64.Все, что использует DirectX или некоторые функции COM могут давать сбои.На самом деле это не Производительность особенность, но ее важно знать.

(Я удалил "DirectX" - возможно, я несу там чушь...но просто:вам нужно убедиться, что все, от чего вы зависите, стабильно на вашей целевой платформе)

Представьте себе обычную компьютерную память в виде массивной карты для игры в бинго с миллиардами квадратов.Для обозначения любого отдельного квадрата на доске существует схема обозначения каждой строки и столбца B-5, I-12, O-52 .. и т.д.

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

Не успеете вы оглянуться, как диктор начнет выкрикивать раздражающе огромные цифры и комбинации букв, чтобы вы знали, какой квадрат отметить на вашей карточке площадью 10 миллиардов квадратных метров.BAZC500000, IAAAA12000000, OAAAAAA523111221

Количество битов компьютера определяет его предел сложности букв и цифр для обращения к любому конкретному квадрату.

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

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

Другими распространенными примерами ограничений адресации являются местные телефонные номера.Обычно они состоят из 7 цифр 111-2222 или переформатированы в число 1,112,222 ..что происходит, когда более 9 999 999 человек хотят иметь собственные номера телефонов?Вы добавляете коды регионов и стран, и ваш номер телефона увеличивается с 7 цифр до 10-11, занимая больше места.

Если вы знакомы с надвигающейся нехваткой IPv4, то это та же проблема..Адреса IPv4 являются 32-битными, что означает, что существует только 2 ^ 32 (~ 4 миллиарда) возможных уникальных IP-адресов, и сегодня в живых гораздо больше людей, чем это.

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

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

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

Я не думаю, что я видел большую часть слова "регистрация" в предыдущих ответах.Цифровой компьютер - это набор регистров с логикой для арифметики и памятью для хранения данных и программ.

Но сначала ...цифровые компьютеры используют двоичное представление чисел, потому что двоичные цифры ("биты") 0 и 1 легко представляются двумя состояниями (включено / выключено) переключателя.Ранние компьютеры использовали электромеханические переключатели;современные компьютеры используют транзисторы, потому что они меньше и быстрее. Намного меньше, и намного быстрее.

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

Имеет смысл организовать компьютерную память в виде серии "местоположений", каждое из которых содержит то же количество битов, что и регистр процессора:например, загрузите этот регистр из этой ячейки памяти.На самом деле, если мы думаем о памяти как байты, это всего лишь удобная часть регистра , и мы можем загрузить регистр из ряда ячеек памяти (1, 2, 4, 8).

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

Но благодаря усовершенствованиям в изготовлении микросхем большее количество транзисторов может быть надежно изготовлено на микросхемах лишь немного большего размера.Регистры могут быть длиннее, а пути между ними могут быть шире.

Когда регистры, которые содержат адреса ячеек памяти, длиннее, они адресуют большие объемы памяти, и данными можно манипулировать большими порциями.В сочетании с более сложной арифметической логикой все делается быстрее.

И разве это не то, чем мы являемся ВСЕ после?

чтобы объяснить, ПОЧЕМУ 32-разрядный режим может получить доступ только к 4 ГБ оперативной памяти:

Максимальный доступный объем памяти = 2n байты, где n - длина слова архитектуры.Таким образом, в 32-разрядной архитектуре максимальное доступное пространство памяти равно 232 = 4294967296 = 4 ГБ оперативной памяти.

64-битная архитектура могла бы получить доступ к 264 = МНОГО памяти.

Только что заметил комментарии Ченса по этому поводу.В любом случае, без опыта работы в CS, да, книги по компьютерной организации и архитектуре в лучшем случае будут трудны для понимания.

  • Процессор использует базу-2 для хранения чисел.База 2, вероятно, была выбрана потому, что это самая "простая" из всех баз:например, таблица умножения с основанием 2 содержит всего 4 ячейки, в то время как таблица умножения с основанием "10" содержит 100 ячеек.
  • До 2003 года распространенные процессоры ПК были только "32-разрядными".
    • Это означает, что собственные числовые операции процессора были предназначены для 32-битных чисел.
    • Вы все еще можете выполнять числовые операции для больших чисел, но они должны выполняться программами, выполняемыми процессором, а не быть "примитивными действиями" (командами на машинном языке), поддерживаемыми процессором, как для 32-разрядных целых чисел (в то время)
    • 32 бита были выбраны потому, что инженеры процессоров любят степени 2, а 16 бит оказалось недостаточно
  • Почему 16 бит было недостаточно?С помощью 16 битов вы можете представлять целые числа в диапазоне 0-65535
    • 65535 = 1111111111111111 в двоичном формате (= 20+21+22...+215 = 216-1)
    • 65535 недостаточно, потому что, например, программное обеспечение для управления больницей должно иметь возможность подсчитывать более 65535 пациентов
    • Обычно люди учитывают размер памяти компьютера, когда обсуждают, насколько большими должны быть его целые числа.65535 определенно недостаточно.Компьютеры имеют намного больше оперативной памяти, чем это, и не имеет значения, считаете ли вы в "Байтах" или битах
  • Какое-то время считалось, что 32 бит достаточно. В 2003 году AMD представила первый 64-разрядный процессор "x86".Вскоре последовала информация.
  • На самом деле 16 бит считался достаточным для давным-давно.
  • Это обычная практика, когда многие аппаратные средства и программное обеспечение должны быть обратно совместимы.В данном случае это означает, что 64-разрядные процессоры также могут запускать любое программное обеспечение, доступное 32-разрядным процессорам.
    • В качестве бизнес-стратегии мы стремимся к обеспечению обратной совместимости.Больше пользователей захотят перейти на более качественный процессор, если он также может делать все, что мог предыдущий.
    • В процессорах обратная совместимость означает, что новые действия, поддерживаемые процессором, добавляются к предыдущему машинному языку.Например, предыдущий машинный язык мог иметь некоторую спецификацию типа "все коды операций, начинающиеся с 1111 зарезервированы для использования в будущем"
    • Теоретически такого рода обратная совместимость с процессором не была бы необходима, поскольку все программное обеспечение можно было бы просто перекомпилировать на новый и несовместимый машинный язык.Однако это не так из-за корпоративных стратегий и политических или экономических систем.В утопическом мире с "открытым исходным кодом" обратная совместимость машинных языков, вероятно, не была бы проблемой.
  • Обратная совместимость x86-64 (распространенного 64-разрядного машинного языка процессоров) обеспечивается в форме "режима совместимости".Это означает, что любая программа, желающая использовать новые возможности процессора, должна уведомить процессор (через ОС) о том, что она должна работать в "64-разрядном режиме".И тогда он мог бы использовать отличные возможности нового 64-разрядного процессора.
  • Следовательно, для того, чтобы программа использовала 64-разрядные возможности процессора:Процессор, операционная система и программа - все должны "поддерживать 64-разрядность".
  • 64-битного кода достаточно, чтобы дать каждому человеку в мире несколько уникальных номеров.Вероятно, он достаточно велик для большинства современных вычислительных задач.Вероятно, маловероятно, что будущие процессоры перейдут еще на 128 бит.Но если они это сделают, этого определенно достаточно для всего, что я могу себе представить, и, следовательно, 256-битный переход не потребуется.

Я надеюсь, что это поможет.

Стоит отметить, что некоторые приложения (напримермультимедийное кодирование / декодирование и рендеринг) значительно (в 2 раза) повышают производительность при записи с полным использованием 64-разрядной версии.

Смотрите 32-разрядные версии по сравнению64-разрядные тесты для Убунту и Windows Vista

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

Также, если у вас ограниченная оперативная память (например, на VPS или выделенном сервере с небольшим объемом оперативной памяти) - выбирайте 32-разрядную версию, сервисы там будут потреблять меньше оперативной памяти.

Это очень простое объяснение, учитывая, что все вышесказанное довольно подробно.

32-разрядный относится к регистрам.Регистры - это места для хранения данных, и все программы работают, манипулируя этими вещами.Assembly работает непосредственно с ними (и, следовательно, почему людям часто нравится программировать на ассемблере).

32-разрядный означает, что базовый набор регистров может содержать 32 бита информации.64-разрядный означает, что неудивительно, 64 бита информации.

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

Но забавно, что, как упоминал тчен, есть много других "штучек", которые в любом случае позволяют вам выполнять более масштабные операции.SSE, SSE2 и т.д. будут иметь 64-битные регистры и 128-битные регистры, даже в "32-битной" системе.

Увеличенная способность адресовать память напрямую связана с увеличением размера базового регистра, основанного на (я полагаю) специфичной для Windows системе адресации памяти.

Надеюсь, это немного поможет.другие плакаты намного точнее меня, я просто пытаюсь объяснить очень просто (помогает то, что я знаю очень мало :)

У меня есть замечательный ответ на этот вопрос, но он не весь укладывается в этот блок ответов....Простой ответ заключается в том, что для того, чтобы ваша программа извлекла байт из памяти, ей нужен адрес.В 32-разрядных процессорах адрес памяти каждого байта хранится в виде 32-разрядного (беззнакового) целого числа, максимальное значение которого составляет 4 ГБ.Когда вы используете 64-разрядный процессор, адрес памяти представляет собой 64-разрядное целое число, что дает вам примерно 1,84467441 × 10 ^ 19 возможных адресов памяти.Этого действительно должно быть достаточно, если вы новичок в программировании.Вам действительно следует больше сосредоточиться на обучении программированию, чем на внутренней работе вашего процессора и на том, почему вы не можете получить доступ к более чем 4 ГБ оперативной памяти на вашем 32-разрядном процессоре.

Простой ответ, объясняющий диапазон адресуемой памяти с 32-разрядными процессорами, таков:

Давайте предположим, что вам разрешено создавать только 3-значные числа, так что максимальное число, которое вы можете увеличить, равно 999.Диапазон чисел составляет (0 - 999).У вас есть всего 1000 номеров для использования.

Но если вам разрешено иметь 6-значные числа, то максимальное число, которое вы можете построить, равно 999999.Теперь диапазон равен (0 - 999999).Итак, теперь у вас есть с собой 1 миллион номеров для использования.

Аналогично, больше битов вам разрешено иметь в процессоре, больший набор адресов (чисел в предыдущем примере) вы можете создать и в конечном итоге использовать для хранения данных и т.д..

Было бы интересно почитать что-нибудь попроще этого!

-РЕКЛАМА.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top