64-bit

Проблемы 64-битного кода в реальных программах: виртуальные функции

Об одной проблеме при миграции кода на 64-битные системы, связанной с некорректной перегрузкой виртуальных функций мы писали в наших статьях уже давно. Например, наша статья "20 ловушек переноса Си++ - кода на 64-битную платформу" вышла в марте 2007 года (хотя ничуть не утратила актуальности). В ней было описание проблемы с виртуальными функциями. Суть проблемы заключается в следующем. С незапамятных времен в библиотеке MFC есть класс CWinApp, в котором имеется функция WinHelp:

Проблемы 64-битного кода в реальных программах: магические константы

Вновь хочется рассказать об очередной 64-битной ошибке, найденной нами в одной из программ. Публиковать в блоге интересные и специфичные ошибки программирования для 64-битных систем постепенно становится хорошей традицией, которой мы постараемся следовать.

Проверка Linux-приложений с помощью PVS-Studio на Windows

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

PVS-Studio и проверка Loki

В PVS-Studio 3.10 будет существенно улучшена поддержка сложных конструкций, основанных на шаблонах, что позволяет эффективно искать ошибки даже в коде тех программ, где используются сложные шаблонные библиотеки, такие как Loki. Но начнем по порядку.

A blog devoted to static code analysis, 64-bit and parallel application development

Hello!
With this note we begin our blog on ISN site. "We" is a Russian startup, OOO "Program Verification Systems", http://www.viva64.com .

The blog will be conducted by two people - director general Evgeniy Ryzhkov and scientific consultant Andrey Karpov. Our company develops and distributes the static code analyzer PVS-Studio intended for detecting errors in the source code of parallel and 64-bit programs.

Магические константы и функция malloc()

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

Приведем классический пример ошибки:
size_t nCount = 10;

int **poinerArray = (int **)malloc(nCount * 4);

Изменения выравнивания типов и последствия

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

Атавизмы в больших системах

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

Есть атавизмы связанные и с 64-битностью. Вернее атавизмы, препятствующие работе современного 64-битного кода. Приведу новый пример, о котором я недавно узнал.

Проблемы 64-битного кода в реальных программах: FreeBSD

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

订阅 64-bit