Как программно определить 64-битную или 32-битную машину? - PullRequest
2 голосов
/ 08 мая 2011

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

Ответы [ 4 ]

6 голосов
/ 08 мая 2011

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

#define IS_64BIT (sizeof(void *) == 8)

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

3 голосов
/ 08 мая 2011

На самом деле вы спрашиваете здесь несколько разных вещей.

Прежде всего, это процессор. Большинство современных процессоров (в течение последних 5 лет) будут поддерживать 64-битные.

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

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

Теперь на ваш вопрос о том, как определить, на какой архитектуре вы работаете, самый надежный способ - задать операционную систему через какой-то вызов API.

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

2 голосов
/ 09 июня 2011

64-битные машины не работают быстрее, чем 32-битные машины, за исключением случаев, когда выполняется 64-битная математика или когда требуется более 4 ГБ ОЗУ.

64-разрядные машины AMD (и более поздние версии Intel) работают быстрее, чем 32-разрядные машины x86, потому что, когда AMD разработала новый набор команд, они добавили больше регистров ЦП и сделали математику SSE по умолчанию.32-разрядные x86-системы 1008 * могут тратить много времени ЦП на передачу данных в ОЗУ, тогда как система x86_64 может хранить эти данные в регистрах ЦП.Регистры намного быстрее, чем кэш-память первого уровня.Наличие большего количества регистров также сохраняет инструкции ЦП, которые в противном случае должны хранить старое значение регистра в ОЗУ, загружать другое значение из ОЗУ, а затем загружать исходное значение обратно из ОЗУ.

В некоторых, особенно нуждающихся в регистреВ некоторых случаях дополнительные регистры могут набрать 30% скорости для программы.Преимущество, как правило, намного меньше этого.

Преимущества скорости в предположении, что SSE2 много.В 32-битных процессорах инструкции SSE могут существовать или не существовать, поэтому для их использования программное обеспечение должно иметь неуклюжий тестовый код и две (или более!) Реализации математических функций.Большинству программного обеспечения просто наплевать, и поэтому оно никогда не беспокоит, всегда прибегая к математике x87 FPU с 486 дней.64-разрядные процессоры сделали SSE2 обязательной частью набора инструкций, поэтому все программы x86_64 могут предполагать, что он существует, и использовать его во всех случаях.

0 голосов
/ 08 мая 2011

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

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

Тесты операционной системы, которые показывают более высокую производительность (возможно, <10% улучшение), не обязательно связаны с оптимизацией, связанной с 64 битами.64-битные архитектуры могут соотноситься с наличием, например, большего количества регистров или расширенных функций, о которых могут знать программы [цитата: <a href="http://www.tuxradar.com/content/ubuntu-904-32-bit-vs-64-bit-benchmarks" rel="nofollow">http://www.tuxradar.com/content/ubuntu-904-32-bit-vs-64-bit-benchmarks], что может быть причиной разницы в производительности (а также других переменных).

Как определить, является ли процессор 32-битным или 64-битным, зависит от того, какую ОС вы используете.Например, в Linux вы можете позвонить uname -a, хотя, вероятно, есть лучший способ сделать это.Если вы используете C / C ++, см. Другой ответ, чтобы узнать, как это определить в программе.

...