Comments 14
64-битные ОС в конечном итоге вытеснят 32-битные — ограничение в 2 ГБ ОЗУ становится чувствительным уже сейчас. С приложениями выигрыш не так очевиден. Зачем мне 64-битный офисный пакет, например?
Затем, что он будет работать быстрее. Например, потому, что в 64-битном режиме доступно в 2 раза больше регистров.
А если мы освободимся от этого 16-битного BIOS, то уберём 16-битный режим вообще, и процессор в результате может стать хотя бы немного проще, что сократит затраты на разработку и тестирование процессоров.
А если мы освободимся от этого 16-битного BIOS, то уберём 16-битный режим вообще, и процессор в результате может стать хотя бы немного проще, что сократит затраты на разработку и тестирование процессоров.
16-битный режим убрать не удастся. Думаете, ни одна 32-битная программа не обращается к регистру AX? Впрочем, я не специалист по компиляторам; буду рад, если Вы укажете на мою неправоту.
Насчёт скорости работы — не могу не согласиться. Не знаю только, насколько велик выигрыш. Если нехватка регистров действительно является узким местом, то почему их не сделать, к примеру, 1024?
Насчёт скорости работы — не могу не согласиться. Не знаю только, насколько велик выигрыш. Если нехватка регистров действительно является узким местом, то почему их не сделать, к примеру, 1024?
16-битный режим это не адресация регистров. Это полностью весь real mode.
Itanium — 128 регистров. ARM — 16 регистров. Сложность видимо в том, что во-первых для обеспечения работы конвейера приходится иметь несколько наборов регистров, а во-вторых сложность в сохранении контекста (тысячу регистров сохранять и восстанавливать долго).
Itanium — 128 регистров. ARM — 16 регистров. Сложность видимо в том, что во-первых для обеспечения работы конвейера приходится иметь несколько наборов регистров, а во-вторых сложность в сохранении контекста (тысячу регистров сохранять и восстанавливать долго).
real mode — это модель памяти с 20 битными адресами и адресным пространством в 1 МБ. 32-битные регистры в нём доступны.
«для обеспечения работы конвейера приходится иметь несколько наборов регистров» — так в чём проблема? Сделать 1024*N регистров…
«сложность в сохранении контекста» решается путём введения регистровых окон.
«для обеспечения работы конвейера приходится иметь несколько наборов регистров» — так в чём проблема? Сделать 1024*N регистров…
«сложность в сохранении контекста» решается путём введения регистровых окон.
С офисом-то как раз все хорошо: я в программе бета-тестинга 2010 офиса, и новый Excel довольно шустро ворочает файлами по 4Gb. Например, можно создать табличку с полной статистикой по среднему сайту за год, понастроить сводных таблиц и сделать доскональный анализ вообще без программирования и SQL запросов. 2007 Excel имеет, скажем так, определенные ограничения в этом плане ;).
Ну и как сказали выше — ряд тестов показывает прирост производительности.
Ну и как сказали выше — ряд тестов показывает прирост производительности.
Я выбрал неудачный пример с офисом. Как-то в студенческую пору я попытался открыть Вордом документ в 500 страниц, и с тех пор у меня стойкая уверенность, что Офис не подходит для больших файлов. Видимо, ситуация изменилась к лучшему =)
Я всё же вернусь к исходному утверждению. Большинству софта не нужно больше 2 ГБ памяти. Аська, антивирь, VPN клиент, почта, Notepad++, шифровалка дисков, смотрелка картинок, Акробат ридер… это из того, что сейчас запущено на моём компе. С браузером ситуация спорная (я неспособен удержать в голове больше пары десятков вкладок, некоторые открывают больше). Но вот например Хром, в котором каждая вкладка является отдельным процессом, точно не нуждается в немеряных гигабайтах.
Я всё же вернусь к исходному утверждению. Большинству софта не нужно больше 2 ГБ памяти. Аська, антивирь, VPN клиент, почта, Notepad++, шифровалка дисков, смотрелка картинок, Акробат ридер… это из того, что сейчас запущено на моём компе. С браузером ситуация спорная (я неспособен удержать в голове больше пары десятков вкладок, некоторые открывают больше). Но вот например Хром, в котором каждая вкладка является отдельным процессом, точно не нуждается в немеряных гигабайтах.
Сидел сейчас лазил по своему меню «Start». Долго думал. Расклад получается 50 на 50 — примерно половина приложений, которыми я регулярно пользовался последние пару недель запросто выйдут за 2ГБ если будет куда (сразу скажу что я, как и большинство Хабралюдей, все-таки нерепрезентативная выборка).
С другой стороны, годы балансирования на грани 2ГБ даром не прошли: замечаю за собой, что стараюсь закрывать лишние файлы, проекты, фотографии. Экономлю :)
С другой стороны, годы балансирования на грани 2ГБ даром не прошли: замечаю за собой, что стараюсь закрывать лишние файлы, проекты, фотографии. Экономлю :)
Сейчас у меня относительно свеже поставленная 64-битная Windows 7. Из программ запущена только Opera для просмотра этой страничке. В фоне работают такие приложения как Касперский, аська, лингво. Но это минимум, который действительно необходим. Ну и плюс конечно запущены разные сервисы и так далее. Что именно не знаю, что система посчитала нужны, то и запущено. Я ничего не включал и не отключал. Так вот, сейчас при запуске Task manager он пишет, что используется уже 1,47 ГБ памяти (всего в системе установлено 8 ГБ). Так что вот я еще ничего не запустил, а 1,5 ГБ уже израсходовалось. :)
Кстати, то что офис не подходит для больших файлов (не буду как-то обсуждать это), совсем не факт, что ему не нужна 64-битная версия. Сейчас есть бывают такие документы Word, что документ на 10 страниц с встроенной высококачественной графикой занимает ужас сколько памяти :-).
Кстати, с 64-битными программами есть следующий интересный эффект. Пока у производителя ПО нет 64-битной версии, он утверждает, что она и не очень нужна. Например, когда не было 64-битного Adobe Photoshop, то были записи и обсуждения, в которых говорилось, что и не так это нужно. А как появился 64-битный Photoshop, то теперь везде его реклама и рассказывается о повысившейся производительности. :)
Подведем итоги. Были быстро найдены все ошибки. Даже неинтересно как-то. :)
1) sizeof(int) + sizeof(void *) не равно sizeof(MyStruct). Это связано с выравниванием полей в структурах. В результате на 64-битной системе выделяется меньше памяти, чем необходимо. Обратите внимание, что если исправить все остальные ошибки, программа успешно работает. То есть перетирается некоторая пока неиспользуемая память. Это может быть весьма неприятно, так как усложняет диагностику подобных ошибок.
2) Условие result != unsigned(-1) на 64-битной системе всегда истинно. Схожие ошибки можно нередко встретить в программах активно работающих со строками. Образуются они так. В начале пишется код:
size_t result = str.find(«5»);
if (result != -1)
Он успешно работает на 32-битной системе. И хотя это плохой стиль, он будет успешно работать и на 64-битной системе. Иногда компиляторы/анализаторы предупреждают пользователя о сравнении знаковых и беззнаковых значений, что чревато определенным видом ошибок. И помятуя об этом программист приписывает некорректное приведение типов к unsigned. Оно подавляет предупреждения, но вносит ошибку, которая потом проявится на 64-битной системе.
3) Конструкция throw p — A; генерирует исключение, используя тип ptrdiff_t. Это приводит к тому, что на 64-битной системе данное исключение не будет перехвачено с помощью catch (int position) {}. Причина в том, что ptrdiff_t и int совпадают в 32-битной системе и не совпадают в 64-битной.
А теперь та долгожданная реклама, о которой так много говорят. Если запустить анализатор Viva64 входящий в состав PVS-Studio то он выдаст на рассматриваемый код следующие предупреждения:
error V119: More than one sizeof() operators are used in one expression. r:\...\example_x64_bug_01.cpp 22
error V112: Dangerous magic number 4 used: p = A; p <= &A[4]; p++). r:\...\example_x64_bug_01.cpp 31
error V115: Memsize type used for throw. r:\...\example_x64_bug_01.cpp 34
error V104: Implicit type conversion to memsize type in an arithmetic expression. r:\...\example_x64_bug_01.cpp 40
Анализатор обнаружил все ошибки, а также предупредил о наличии опасной константы «4», что в прочем является для данного кода ложным срабатыванием.
Продолжим или хватит спама? :)
1) sizeof(int) + sizeof(void *) не равно sizeof(MyStruct). Это связано с выравниванием полей в структурах. В результате на 64-битной системе выделяется меньше памяти, чем необходимо. Обратите внимание, что если исправить все остальные ошибки, программа успешно работает. То есть перетирается некоторая пока неиспользуемая память. Это может быть весьма неприятно, так как усложняет диагностику подобных ошибок.
2) Условие result != unsigned(-1) на 64-битной системе всегда истинно. Схожие ошибки можно нередко встретить в программах активно работающих со строками. Образуются они так. В начале пишется код:
size_t result = str.find(«5»);
if (result != -1)
Он успешно работает на 32-битной системе. И хотя это плохой стиль, он будет успешно работать и на 64-битной системе. Иногда компиляторы/анализаторы предупреждают пользователя о сравнении знаковых и беззнаковых значений, что чревато определенным видом ошибок. И помятуя об этом программист приписывает некорректное приведение типов к unsigned. Оно подавляет предупреждения, но вносит ошибку, которая потом проявится на 64-битной системе.
3) Конструкция throw p — A; генерирует исключение, используя тип ptrdiff_t. Это приводит к тому, что на 64-битной системе данное исключение не будет перехвачено с помощью catch (int position) {}. Причина в том, что ptrdiff_t и int совпадают в 32-битной системе и не совпадают в 64-битной.
А теперь та долгожданная реклама, о которой так много говорят. Если запустить анализатор Viva64 входящий в состав PVS-Studio то он выдаст на рассматриваемый код следующие предупреждения:
error V119: More than one sizeof() operators are used in one expression. r:\...\example_x64_bug_01.cpp 22
error V112: Dangerous magic number 4 used: p = A; p <= &A[4]; p++). r:\...\example_x64_bug_01.cpp 31
error V115: Memsize type used for throw. r:\...\example_x64_bug_01.cpp 34
error V104: Implicit type conversion to memsize type in an arithmetic expression. r:\...\example_x64_bug_01.cpp 40
Анализатор обнаружил все ошибки, а также предупредил о наличии опасной константы «4», что в прочем является для данного кода ложным срабатыванием.
Продолжим или хватит спама? :)
Упс. Промахнулся окном. Это относилось к habrahabr.ru/blogs/cpp/82019/. Прошу удалить.
Sign up to leave a comment.
64-битные технологии – еще одно направление в современном программном обеспечении