Уроки разработки 64-битных приложений на языке Си/Си++

    Мы регулярно пишем статьи посвященные разработке и тестированию 64-битных программ на языке Си/Си++. Каждая из статей представляет взгляд на задачу разработки 64-битных программ с разных точек зрения. Но существенная часть информации в них повторяется, так как необходимо знакомить читателя с проблематикой и вводить различные определения. Это, к сожалению, делает чтение подборки статей скучным занятием и соответственно не позволяет всесторонне изучить вопросы разработки 64-битных приложений.

    Мы решили объединить все наши знания в единый труд, в котором будут рассмотрены сразу все вопросы, касающиеся 64-битного программирования. Для оформления в виде статьи материала оказалась слишком много и мы решили представить его в виде курса уроков.

    Кратко опишу курс "Уроки разработки 64-битных приложений на языке Си/Си++" и приведу его содержание.

    Курс посвящен созданию 64-битных приложений на языке Си/Си++ и ориентирован на разработчиков, использующих среду Visual Studio 2005/2008. Разработчики для других 64-битных операционных систем также узнают много интересного. В курсе будут рассмотрены все этапы, позволяющие создать новое надежное 64-битное приложение или выполнить миграцию существующего 32-битного кода на 64-битную систему.

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

    Авторами курса являюсь я (к.ф.-м.н. Карпов Андрей Николаевич) и к.т.н. Рыжков Евгений Александрович. Соответственно мы готовы обсуждать здесь этот курс, давать пояснения, исправлять замеченные недочеты, учитывать ваше мнение.

    Содержание курса:
    • Урок 01. Что такое 64-битные системы.
    • Урок 02. Поддержка 32-битных приложений.
    • Урок 03. Перенос кода на 64-битные системы. За и против.
    • Урок 04. Создание 64-битной конфигурации.
    • Урок 05. Сборка 64-битного приложения.
    • Урок 06. Ошибки в 64-битном коде.
    • Урок 07. Проблемы выявления 64-битных ошибок.
    • Урок 08. Статический анализ для выявления 64-битных ошибок.
    • Урок 09. Паттерн 01. Магические числа.
    • Урок 10. Паттерн 02. Функции с переменным количеством аргументов.
    • Урок 11. Паттерн 03. Операции сдвига.
    • Урок 12. Паттерн 04. Виртуальные функции.
    • Урок 13. Паттерн 05. Адресная арифметика.
    • Урок 14. Паттерн 06. Изменение типа массива.
    • Урок 15. Паттерн 07. Упаковка указателей.
    • Урок 16. Паттерн 08. Memsize-типы в объединениях.
    • Урок 17. Паттерн 09. Смешанная арифметика.
    • Урок 18. Паттерн 10. Хранение в double целочисленных значений.
    • Урок 19. Паттерн 11. Сериализация и обмен данными.
    • Урок 20. Паттерн 12. Исключения.
    • Урок 21. Паттерн 13. Выравнивание данных.
    • Урок 22. Паттерн 14. Перегруженные функции.
    • Урок 23. Паттерн 15. Рост размеров структур.
    • Урок 24. Фантомные ошибки.
    • Урок 25. Практическое знакомство с паттернами 64-битных ошибок.
    • Урок 26. Оптимизация 64-битных программ.
    • Урок 27. Особенности создания инсталляторов для 64-битного окружения.
    • Урок 28. Оценка стоимости процесса 64-битной миграции Си/Си++ приложений.
    PVS-Studio
    Статический анализ кода для C, C++, C# и Java

    Комментарии 50

      +1
      Спасибо, почитаю.
      • НЛО прилетело и опубликовало эту надпись здесь
          +1
          Господа, спасибо большое за труды и за то, что делитесь ими. Но! Вы бы облегчили жизнь, если бы оформили курс в PDF. Как вы на это смотрите?
            +1
            Поясните, пожалуйста, а чем плох такой вариант (много маленьких HTML) и зачем нужен PDF? По собственному опыту скажу, что много html бесит, когда на сайте рекламы куча. Но там-то рекламы нет (в смысле баннеров :-)). Так чем PDF лучше?
              0
              ИМХО, много лишнего есть. Например, колонки «СТАТЬИ», «БЛОГ», «НОВОСТИ».
                0
                Я не отмазываюсь, а хочу понять как сделать лучше :-). Как по мне, так колонки «статьи» и «блог» показывают, что на сайте может быть еще что-то интересное есть. Я не прав?

                Но в любом случае, на каждой странице уроков есть кнопка «Версия для печати», которая открывает голый HTML. Может это решит вопрос?
                  0
                  Хотел быстренько пролистать, но на страницах нет перехода к следующей главе, из-за этого пришлось возвращаться на содержание. Собственно, по этой же причине и не долистал до конца.
                  В целом же впечатление хорошее, для новичков пойдет. Но для тех, кто хочет почитать именно про особенности 64-х версий, имхо, слишком растянуто. Многое и так понятно и относится и 32-м версиям. Особенно если есть опыт написания кроссплатформенных приложений.
                    +1
                    По большому счёту, надо бы акцент делать не на портировании на amd64, а на исправление косяков при работе с памятью/ и т.д.
                +1
                Ну во-первых свёрстанный PDF гораздо удобнее в плане навигации и юзабилити. Во-вторых гораздо удобнее иметь все части у себя локально, а не лезть за каждой в сеть. Если вы, например, что-то полезное узнали в 24 уроке, через месяц вам это пригодилось. Вы открываете PDF и ищите тутже. А здесь вам придётся пойти на сайт, да ещё и часть вспомнить.

                В общем, преимущества PDF здесь очевидны, по-моему.
                  0
                  И наконец распечатать один документ гораздо проще, чем 28.
                    0
                    Как минимум читать в отсутствии компьютера с интернетом ;)
                    Например на читалке или телефоне.
                    0
                    Поддерживаю. Было бы просто чудесно, если бы вы сделать в виде PDF-книги.
                    0
                    к.ф.-м.н. + к.т.н.= 28 уроков.

                    Почему же не больше?! Ждём продолжения!!!
                      +3
                      Актуальная тема. Мне на 64 битной машине не хватает нативного 64 битного софта.
                        0
                        спасибо
                        обязательно изучу
                          +2
                          Мне почему то кажется, что большую часть из этого я видел в обычных учебниках по Си/Си++, неужели их никто не читает?
                            +1
                            Да, и даже без учета специфики x64.
                            0
                            Какая-то дешевая лицензия у Вашей студии на одно человекоместо, _всего-то_ 2200 евро. Заверните…
                              0
                              Зато на команду из 5 человек всего €5900, то есть €1180 на человекоместо. Клиентам такой вариант больше подуше.
                                0
                                меня зеленое млаенькое чудовище задушит покупать за такие деньги ИДЕ. :-) да здравствует GCC+vim!!! :-)
                                  0
                                  ну как альтернатива — XCode — тоже совершенно бесплатно (ну соотвественно GCC+XCode) :-)
                                  Единетсвенный производитель ОС, который продает ИДЕ для разработки под свою ось — это Майкрософт. Когда они уже начнут раздавать ее бесплатно? (экспресс не предлагать :-) )
                                    +2
                                    Вы знаете, я вот зашел на avto.ru — подержанная Audi A6 стоит 765 000 рублей. Зашел на cian.ru — чахлая трехкомнатная квартира в Москве стоит 250 000 долларов.

                                    Никакой возможности продавать такой софт дешево не вижу. Почему? Потому что денег хочется…
                                      0
                                      мммм тут вопрос в другом, сделав ИДЕ бесплатной — макйрософт бы привлекла больше разработчиков. Конечно ни для кого не секрет, что в нашей стране подавлящее большинство разработчиков пользуются пиратской версией студии, но это неправильно. Так не должно быть.
                                      Если майкрософт не заинтересовано в привлечении разработчиков и наслаждается тем, что и без этого много софта пишется под виндовз, то это временное явление и может случится так, что они потеряют рынок настольных ПК, как потеряли рынок мобильных ПК.
                                      Зачем мне, как разработчику, платить деньги, если есть бесплатные альтернативы причем иногда не хуже а в некоторых случаях и лучше чем студия?
                                        0
                                        >>> Конечно ни для кого не секрет, что в нашей стране подавлящее большинство
                                        >>> разработчиков пользуются пиратской версией студии

                                        У меня в этом сомнения.

                                        >>> Зачем мне, как разработчику, платить деньги,
                                        >>> если есть бесплатные альтернативы причем иногда не хуже
                                        >>> а в некоторых случаях и лучше чем студия?

                                        Я не занимаюсь продажами Visual Studio. Я продаю PVS-Studio.
                                          0
                                          Да, провтыкал, извиняюсь. В вашем случае это опциональный пакет. И естественно было бы странно, если бы вы его бесплатно раздавали. Учитывая целевую аудиторию — цена нормальная :-)

                                          Посмотрел цены на визуалстудию — мое возмущение поуменьшилось, но не пропало — цена на про версию 30 тыщ.

                                          По поводу сомнений — я один раз видел только лицензионную студию в московсих софтварных конторах. Причем это были не шарашкины. Может конечно в ящике у бухгалтера пылятся пару коробок, но устанавливали все с самописок.

                                            0
                                            >>> Посмотрел цены на визуалстудию — мое возмущение поуменьшилось, но не пропало — цена на про версию 30 тыщ.

                                            Смотрите дальше :-). На Microsoft Empower, Microsoft BizSpark…

                                            >>> я один раз видел только лицензионную студию в московсих софтварных конторах.

                                            Ну это явно неудачный какой-то опыт. У нас в провинции даже у шаракиных студия нормальная.
                                              0
                                              >>>> Смотрите дальше :-). На Microsoft Empower, Microsoft BizSpark…
                                              Не буду :-) очень боюсь.

                                              >>>> Ну это явно неудачный какой-то опыт. У нас в провинции даже у шаракиных студия нормальная.

                                              Тяжело верится, но очень хочется на это надеятся, я сторонник лицензионного ПО и против пиратства. Именно поэтому давит меня жаба покупать студию.
                                                0
                                                Кстати, а как там у minGW с кросскомпиляцией под amd64?
                                                  0
                                                  вроде есть проект MinGW-w64, что по поводу кросскомпиляции в нем не знаю и вообще насколько там и чего тоже не знаю, не приходилось компилировать под Win64 еще
                                                    0
                                                    Да нам бы сделать таки сборки для win64, студии то ни у кого легальной нету. Вроде бы можно из Линукса кросскомпилировать, таргеты есть, говорят есть под вин собранный gcc + cygwin
                                                      0
                                                      Поделитесь об успехах, если они будут, интересно.
                                                      Я настраивал как-то gcc для компиляции из-под макоси для виндовза. Даже работало.
                                                        0
                                                        Вроде бы в Генте есть в crossdev'е таргет mingw64, надо будет его собрать
                                                          0
                                                          Черт… неполучилось сладкой жизни((( не собирается
                                                      0
                                                      komisar.gin.by/mingw/index.html

                                                      Только там один голый компилятор. Все зависимости придётся пересобирать самостоятельно. ffmpeg для w64, к примеру, собирается так:

                                                      ./configure --enable-cross-compile --cross-prefix=x86_64-pc-mingw32- --prefix=/mingw/x86_64-pc-mingw32 --arch=x86_64 --enable-gpl --enable-postproc --enable-memalign-hack && make
                                          0
                                          0
                                          Помоему всё же дешевле читать правильные маны и желательно до конца
                                            0
                                            Согласен. Только обязательно нужно помнить, что чтение манов и мантр не помогает, когда у нас УЖЕ есть код проекта. :)
                                              +1
                                              Ну я сейчас на чисто 64 битном окружении сижу, поэтому мне скорее нужно проверять, не сломал ли я совместимость с 32 битным теоретически, а практически видел сборки нашего детища под arm и powerpc
                                          +1
                                          Спасибо за курс, ваш напроломный маркетинг, похоже, действительно действует.

                                          pdf-версия (с копирайтом в конце) исключительно для удобста печати, т.к. «версия для печати» на сайте на первом же уроке не отображает картинки: depositfiles.com/files/0h3ysxmbc

                                            0
                                            Очень плохая идея. Поскольку уроки сейчас регулярно обновляются нами, то прошу удалить этот pdf во избежание распространения устаревших материалов.

                                            А «отвалившиеся» картинки конечно же поправим, спасибо за замечание.
                                              0
                                              Мы починили картинки в верии для печати, спасибо за замечание.
                                                0
                                                По ссылке www.viva64.com/lessons-x64/all_rus.html доступны все уроки в виде единого HTML-файла. В том числе есть также версия для печати (без картинок сайта), которую желающие могут распечатать с помощью pdf-принтера в pdf.
                                                +1
                                                Скажите пожалуйста, а почему у вас в первом уроке постоянно повторяется Intel 64, Intel 64, но лишь вскользь упоминается, что вы почему-то использовали документацию от AMD? У неискушённого читателя может сложиться впечатление, что это Microsoft изобрела интернет… Ой, в смысле, это Intel изобрела x86-64 ;)
                                                  0
                                                  Мирового сговора не было. Так вот написалось… :) Тем более есть подозрение, что скоро название Intel 64 станет гораздо популярнее названия AMD64. Intel вкладывает усилия. чтобы везде использовать эти названия. И лучше примкнуть к этому направлению, чем продолжать использовать не модное название. :)
                                                    +1
                                                    Так вот написалось…
                                                    Вы же уроки пишите, поэтому по отношению к названию данная фраза вообще не должна применяться.
                                                    Напишите, что это AMD64 с пометкой, что в настоящее время Intel называет это «Intel 64».
                                                    Уроки должны отражать объективную реальность, развивать профессионализм. А если у них терминология с самого 1-ого урока неправильно складывается, то о каком профессионализме можно говорить (и теперь, читая данные уроки, мне каждое определение/название проверять, как оно должно было звучать, чтобы потом в глазах коллег идиотом не выглядеть, которые про «Intel 64» ни разу не слышали (как и я), но прекрасно знают про AMD64)?
                                                      +1
                                                      А чем плохо нейтральное X86-64? Лучше его юзать тогда уж в описаниях, а про amd64, emt64, x64, etc вспомнить лишь в истории архитектуры.
                                                      Главное, упаси боже, не использовать название x64, оно хоть и устоявшееся но абсолютно безграммотное
                                                    0
                                                    Товарищи, у кого что есть по сути уроков? PDF мы со временем сделаем. Но в начале хочется по возможности выправить ошибки, ляпы, неточности, ошибки. Прошу писать сюда или на почту, кто что заметил, а также просто рекомендации по улучшению. Заранее все спасибо.
                                                      0
                                                      Мы починили картинки в верии для печати, спасибо всем, кто обратил на это внимание. Прошу еще высказываться! Из того, что уже «попросили»:

                                                      1. Переход между уроками — сделаем.
                                                      2. pdf-версия — сделаем.

                                                      Как еще улучшить?
                                                        0
                                                        Спасибо! Почитаю.
                                                          0
                                                          По ссылке www.viva64.com/lessons-x64/all_rus.html доступны все уроки в виде единого HTML-файла. В том числе есть также версия для печати (без картинок сайта), которую желающие могут распечатать с помощью pdf-принтера в pdf.

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое