Pull to refresh

Comments 32

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

Часто после перекомпиляции для 64-битной системы складывается впечатление, что программа успешно работает. Но при этом она может содержать массу временно скрытых дефектов. Чтобы предупредить разработчиков об этом, и сделана эта статья. В дополнении также хочу предложить еще одну запись в блоге на нашем сайте: "Оптимизация в мире 64-битных ошибок".
Продолжайте надоедать, это полезный материал ;)
Очень приятная статья. Улыбало без грудей.
Вы не подумайте чего плохого, статья на самом деле понравилась :) Просто статья позитивна без графики (а последнее время на dirty/habrahabr частенько женские прелести прилетают без ведомой на то причины).

Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Обещай впредь выражаться четко, ясно и без выпендрежа…
Статья замечательная! Спасибо!
А «надоедать» такого рода публикациями, все-таки стоит, т.к. в последнее время на хабре достойных технических материалов поубавилось.
Поставил плюс за байку про коня, а дальше слишком многабукаф. :)
Если не читали основную часть статьи, зачем засорять поле комментов?
Давайте люди еще начнут комментить те топики, которые им вообще было лень читать вплоть до названия? =)
А можно написать скрипт который будет искать все статьи хабра, отсутствующие в истории просмотров и оставлять там коммент «А ваш топик я проглядел (пропустил)»…
Ваши примеры ясны. Но, все же интересно — что еще может случиться при портировании в 64 бита кроме различных вариаций «Index Out Of Bound Exception», полагая при этом, что программа в 32 битной среде работает корректно?
Наибольшее количество таких примеров собрано в статье 20 ловушек переноса Си++ — кода на 64-битную платформу. Например, это ошибки с виртуальными функциями, исключения, сериализация данных.

Дополнительно предлагаю вниманию вот эти записи:

Почему A + B != A-(-B)
Красивая 64-битная ошибка на языке Си
Магические константы и функция malloc()
Проблемы 64-битного кода в реальных программах: магические константы
Изменения выравнивания типов и последствия
Поиск ошибок явного приведения типа в 64-битных программах

Это примеры, которые работоспособны в 32-битном режиме, но приводят к ошибкам при компиляции для 64-битной системы.

Всё эти ошибки зависят от компилятора…
Не хочу юзать холивар. Но GCC гораздо «оптимистичнее» использовать в плане 64-битных разработок.
Проблем явно меньше. И они не такие «весёлые». Плохо только что под недоОсь его нет =)
Надеюсь что и не будет.
Ну давайте минусуйте… минусуйте…
Типо я не прав?..
А причем здесь компилятор? Если код некорректен, то не спасет, если он собирается GCC или является скажем OpenSource. Все это никак не связано. Вот пример.
К сожалению, нет у меня 64-битной системы, чтобы проверить падающие варианты из статьи компилятором GCC. Интересно, какие результаты с этим компилятором?
На этот предмет изучал только Visual C++.
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.

Пользуйтесь :-)
Ошибки зависят не от компилятора, а от смены разрядности.

А оптимизатор просто делают их реже проявляющимся. Оптимизация есть в любом современном компиляторе.
Я не спорю, просто товарищ по-моему пытался развить холивар, обращаясь к win и gcc :-)
да да а под Cygwin'ом GCC 4.4.3… =)
> Плохо только что под недоОсь его нет =)

Есть.
Вообще вся надежна на то, что gcc честно начнет ругаться на плохие места, а чтобы был стимул исправлять варнинги добавляем волшебный ключик -Werror, теперь все варнинги воспринимаются как ошибки.
наю про MinGW
и за компилятор я єто не считаю
ну + под cygwin GCC 4.4.3… утопично как то… Вы так ну думаете?
cygwin + MinGW всегда будут отставать от актуальной версии GCC
и вот почему под недоОсью его нет и не будет.
Уухх, спасибо за статью, нашёл для себя не мало интересно информации!

p.s. А на втором бубне я напишу «x64 only»
UFO just landed and posted this here
Народ, дайте кто-нить пример кода, который точно упадёт на 64битной студии, но юзает лишь стандартную библиотеку, а то тут в статье лишь куски приведены, неохота всё самому раскручивать
Вам поможет проект PortSample входящий в состав дистрибутива PVS-Studio. Этот проект можно открыть в Visual Studio 2005/2008 и полюбоваться на разнообразные 64-битные ошибки, поиграть с ними. Многие из них приводят к падению. Заодно этот проект полноценно проверяется демонстрационной версией PVS-Studio. Скачать демонстрационную версию можно здесь. Подробнее познакомиться с PVS-Studio и PortSample можно здесь.
> Этот проект можно открыть в Visual Studio 2005/2008 и полюбоваться на разнообразные 64-битные ошибки, поиграть с ними.

Мне нужен пример для gcc
Как по мне дак там вполне самостоятельные куски кода разве что в main() их скопировать:)
Не совсем, самые важные части там обычно… скрыты. И увы, у меня не слишком много времени и желания самому придумывать то, что там должно было быть. Да и есть куски с winAPI, которого у меня нет сейчас под рукой
Занятно, было бы интересно увидеть продолжение исследования в области переноса на x64. Хочется побольше интересных примеров.

Правда не очень понятна актуальность адресации массивов больше INT_MAX — конечно, не то что бы «640Кб хватит всем», но пока плоские структуры такого размера скорее редкое исключение, и в случае даже потенциальной возможности их возникновения нужно подумать, а нельзя ли решить вопрос другим способом.
Разные интересные примеры можно посмотреть в нашем блоге. Вот выборка записей по 64-битности. Блог регулярно пополняется.

Правда не очень понятна актуальность адресации массивов больше INT_MAX.

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

Кстати, если есть желание, можно поиграть здесь в игру. Я буду приводить различные примеры кода, а участники будут пытаться найти в них ошибки силой мысли. Ошибки будут на тему 64-битности, параллельности и просто на внимательность.
Игра — интересная идея, поддерживаю.
хорошая идея…
а можно пример на параллельность?
спасибо за Ваши статьи

я как раз начал разрабатывать одно приложение
хочу, чтоб оно так же без сбоев работало под 64

кстати если интересно, то можете заглянуть в мой персональный блог и посмотреть наброски.
хотелось бы услышать мнение опытного специалиста
Sign up to leave a comment.