Есть ли реальная точка компиляции приложения Windows как 64-битного? - PullRequest
21 голосов
/ 25 февраля 2010

Я бы с уверенностью сказал, что 99% приложений, которые мы пишем, не должны занимать более 2 ГБ памяти. Конечно, у OS , работающей в 64-битном режиме, есть много очевидных преимуществ для увеличения объема ОЗУ, но есть ли какая-то особая причина, по которой типичное приложение будет скомпилировано в 64-битном режиме?

Ответы [ 12 ]

19 голосов
/ 25 февраля 2010

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

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

В проведенном мною тестировании (конечно, не всестороннем) я не обнаружил случаев, когда 32-битная сборка была быстрее. Однако многие из выполняемых мною SQL-операций (высокая загрузка ЦП и высокая скорость ввода-вывода) были быстрее на 20-50% при работе с 64-битной сборкой. Эти тесты включали в себя несколько «уродливых» операторов SQL, а также некоторые тесты TPCC с высокой степенью параллелизма. Конечно, многое зависит от переключателей компилятора, поэтому вам нужно провести собственное тестирование.

14 голосов
/ 25 февраля 2010

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

10 голосов
/ 25 февраля 2010

x64 имеет еще восемь регистров общего назначения, которые недоступны при запуске 32-битного кода. Это в три раза больше (вдвое больше, если вы считаете ESI, EDI, EBP и ESP общим назначением; я так не считаю). Это может сэкономить много нагрузок и сохранить в функциях, которые используют более четырех переменных.

9 голосов
/ 25 февраля 2010

Не стоит недооценивать маркетинговую ценность предложения собственной 64-разрядной версии вашего продукта.

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

6 голосов
/ 25 февраля 2010

Я бы сказал, делайте это только в том случае, если вам нужно больше 2 ГБ.

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

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

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

5 голосов
/ 25 февраля 2010

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

Для многих приложений не так много веских технических причин, но если это просто, перенос в настоящее время может сэкономить ваши усилия в будущем.

1 голос
/ 25 февраля 2010

Я недавно читал эту статью, Оптимизация программного обеспечения на C ++ . В главе 2.3 Choice of operating system приводится сравнение преимуществ и недостатков 64- и 32-разрядной системы с некоторыми конкретными наблюдениями, касающимися Windows.

Марк Уилкинс уже отметил в этой теме о дополнительных регистрах для вызовов функций. Еще одно интересное свойство 64-битной системы:

The SSE2 instruction set is supported on all 64-bit CPUs and operating systems.

Инструкции SSE2 могут обеспечить отличную оптимизацию, и они все чаще используются, поэтому, на мой взгляд, это заметная особенность.

1 голос
/ 25 февраля 2010

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

1 голос
/ 25 февраля 2010

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

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

0 голосов
/ 25 февраля 2010

Когда вы говорите, что 99% приложений не выиграют от 64-битных приложений, это вполне может быть справедливо для вас лично, но в течение дня я использую Visual Studio и Xcode для компиляции C ++ с большой кодовой базой, ищите мульти -Гб репозитории с Google Desktop и Spotlight. Затем я прихожу домой, чтобы написать музыку с использованием секвенсора, использующего несколько ГБ звуковых библиотек, и сделать несколько фотоснимков на моих 20 ГБ фотографий, и, возможно, немного отредактировать видео с моими праздничными клипами.

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

...