Комментарии 32
Я не хочу здесь сильно надоедать статьями по разработке 64-битных приложений, но обязан сделать эту запись. Без нее знакомство с потенциальными 64-битными проблемами неполно. Ошибки, возникающие при переносе программы на 64-битные системы коварны тем, что могут проявлять себя только при попытке обработать объем данных большего размера, чем было доступно для 32-битной систем. Или при незначительной модернизации кода.
Часто после перекомпиляции для 64-битной системы складывается впечатление, что программа успешно работает. Но при этом она может содержать массу временно скрытых дефектов. Чтобы предупредить разработчиков об этом, и сделана эта статья. В дополнении также хочу предложить еще одну запись в блоге на нашем сайте: "Оптимизация в мире 64-битных ошибок".
Часто после перекомпиляции для 64-битной системы складывается впечатление, что программа успешно работает. Но при этом она может содержать массу временно скрытых дефектов. Чтобы предупредить разработчиков об этом, и сделана эта статья. В дополнении также хочу предложить еще одну запись в блоге на нашем сайте: "Оптимизация в мире 64-битных ошибок".
Продолжайте надоедать, это полезный материал ;)
Очень приятная статья. Улыбало без грудей.
Вы не подумайте чего плохого, статья на самом деле понравилась :) Просто статья позитивна без графики (а последнее время на dirty/habrahabr частенько женские прелести прилетают без ведомой на то причины).
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Статья замечательная! Спасибо!
А «надоедать» такого рода публикациями, все-таки стоит, т.к. в последнее время на хабре достойных технических материалов поубавилось.
А «надоедать» такого рода публикациями, все-таки стоит, т.к. в последнее время на хабре достойных технических материалов поубавилось.
Поставил плюс за байку про коня, а дальше слишком многабукаф. :)
Если не читали основную часть статьи, зачем засорять поле комментов?
Давайте люди еще начнут комментить те топики, которые им вообще было лень читать вплоть до названия? =)
А можно написать скрипт который будет искать все статьи хабра, отсутствующие в истории просмотров и оставлять там коммент «А ваш топик я проглядел (пропустил)»…
Давайте люди еще начнут комментить те топики, которые им вообще было лень читать вплоть до названия? =)
А можно написать скрипт который будет искать все статьи хабра, отсутствующие в истории просмотров и оставлять там коммент «А ваш топик я проглядел (пропустил)»…
Ваши примеры ясны. Но, все же интересно — что еще может случиться при портировании в 64 бита кроме различных вариаций «Index Out Of Bound Exception», полагая при этом, что программа в 32 битной среде работает корректно?
Наибольшее количество таких примеров собрано в статье 20 ловушек переноса Си++ — кода на 64-битную платформу. Например, это ошибки с виртуальными функциями, исключения, сериализация данных.
Дополнительно предлагаю вниманию вот эти записи:
Почему A + B != A-(-B)
Красивая 64-битная ошибка на языке Си
Магические константы и функция malloc()
Проблемы 64-битного кода в реальных программах: магические константы
Изменения выравнивания типов и последствия
Поиск ошибок явного приведения типа в 64-битных программах
Это примеры, которые работоспособны в 32-битном режиме, но приводят к ошибкам при компиляции для 64-битной системы.
Дополнительно предлагаю вниманию вот эти записи:
Почему A + B != A-(-B)
Красивая 64-битная ошибка на языке Си
Магические константы и функция malloc()
Проблемы 64-битного кода в реальных программах: магические константы
Изменения выравнивания типов и последствия
Поиск ошибок явного приведения типа в 64-битных программах
Это примеры, которые работоспособны в 32-битном режиме, но приводят к ошибкам при компиляции для 64-битной системы.
Всё эти ошибки зависят от компилятора…
Не хочу юзать холивар. Но GCC гораздо «оптимистичнее» использовать в плане 64-битных разработок.
Проблем явно меньше. И они не такие «весёлые». Плохо только что под недоОсь его нет =)
Надеюсь что и не будет.
Ну давайте минусуйте… минусуйте…
Типо я не прав?..
Не хочу юзать холивар. Но GCC гораздо «оптимистичнее» использовать в плане 64-битных разработок.
Проблем явно меньше. И они не такие «весёлые». Плохо только что под недоОсь его нет =)
Надеюсь что и не будет.
Ну давайте минусуйте… минусуйте…
Типо я не прав?..
А причем здесь компилятор? Если код некорректен, то не спасет, если он собирается GCC или является скажем OpenSource. Все это никак не связано. Вот пример.
Bloodshed Dev-C++ is a full-featured Integrated Development Environment (IDE) for the C/C++ programming language. It uses Mingw port of GCC (GNU Compiler Collection) as it's compiler. Dev-C++ can also be used in combination with Cygwin or any other GCC based compiler.
Пользуйтесь :-)
Пользуйтесь :-)
> Плохо только что под недоОсь его нет =)
Есть.
Вообще вся надежна на то, что gcc честно начнет ругаться на плохие места, а чтобы был стимул исправлять варнинги добавляем волшебный ключик -Werror, теперь все варнинги воспринимаются как ошибки.
Есть.
Вообще вся надежна на то, что gcc честно начнет ругаться на плохие места, а чтобы был стимул исправлять варнинги добавляем волшебный ключик -Werror, теперь все варнинги воспринимаются как ошибки.
Уухх, спасибо за статью, нашёл для себя не мало интересно информации!
p.s. А на втором бубне я напишу «x64 only»
p.s. А на втором бубне я напишу «x64 only»
НЛО прилетело и опубликовало эту надпись здесь
Народ, дайте кто-нить пример кода, который точно упадёт на 64битной студии, но юзает лишь стандартную библиотеку, а то тут в статье лишь куски приведены, неохота всё самому раскручивать
Вам поможет проект PortSample входящий в состав дистрибутива PVS-Studio. Этот проект можно открыть в Visual Studio 2005/2008 и полюбоваться на разнообразные 64-битные ошибки, поиграть с ними. Многие из них приводят к падению. Заодно этот проект полноценно проверяется демонстрационной версией PVS-Studio. Скачать демонстрационную версию можно здесь. Подробнее познакомиться с PVS-Studio и PortSample можно здесь.
Как по мне дак там вполне самостоятельные куски кода разве что в main() их скопировать:)
Занятно, было бы интересно увидеть продолжение исследования в области переноса на x64. Хочется побольше интересных примеров.
Правда не очень понятна актуальность адресации массивов больше INT_MAX — конечно, не то что бы «640Кб хватит всем», но пока плоские структуры такого размера скорее редкое исключение, и в случае даже потенциальной возможности их возникновения нужно подумать, а нельзя ли решить вопрос другим способом.
Правда не очень понятна актуальность адресации массивов больше INT_MAX — конечно, не то что бы «640Кб хватит всем», но пока плоские структуры такого размера скорее редкое исключение, и в случае даже потенциальной возможности их возникновения нужно подумать, а нельзя ли решить вопрос другим способом.
Разные интересные примеры можно посмотреть в нашем блоге. Вот выборка записей по 64-битности. Блог регулярно пополняется.
Правда не очень понятна актуальность адресации массивов больше INT_MAX.
Я работал с подобными задачами, где это удобно. Хотя конечно не скажу, что это повседневные задачи. Еще раз замечу, что 64-битные ошибки проявляются не обязательно на больших массивах. Разные ссылки я уже приводил выше.
Кстати, если есть желание, можно поиграть здесь в игру. Я буду приводить различные примеры кода, а участники будут пытаться найти в них ошибки силой мысли. Ошибки будут на тему 64-битности, параллельности и просто на внимательность.
Правда не очень понятна актуальность адресации массивов больше INT_MAX.
Я работал с подобными задачами, где это удобно. Хотя конечно не скажу, что это повседневные задачи. Еще раз замечу, что 64-битные ошибки проявляются не обязательно на больших массивах. Разные ссылки я уже приводил выше.
Кстати, если есть желание, можно поиграть здесь в игру. Я буду приводить различные примеры кода, а участники будут пытаться найти в них ошибки силой мысли. Ошибки будут на тему 64-битности, параллельности и просто на внимательность.
спасибо за Ваши статьи
я как раз начал разрабатывать одно приложение
хочу, чтоб оно так же без сбоев работало под 64
кстати если интересно, то можете заглянуть в мой персональный блог и посмотреть наброски.
хотелось бы услышать мнение опытного специалиста
я как раз начал разрабатывать одно приложение
хочу, чтоб оно так же без сбоев работало под 64
кстати если интересно, то можете заглянуть в мой персональный блог и посмотреть наброски.
хотелось бы услышать мнение опытного специалиста
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
64-битный конь, который умеет считать