Pull to refresh

7 шагов по переносу программы на 64-битную систему

PVS-Studio corporate blog

Аннотация


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

Читать дальше →
Total votes 107: ↑103 and ↓4 +99
Views 35K
Comments 51

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

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

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

Кратко опишу курс "Уроки разработки 64-битных приложений на языке Си/Си++" и приведу его содержание.
Читать дальше →
Total votes 68: ↑59 and ↓9 +50
Views 6.4K
Comments 50

64 бита

Intel corporate blog

Статья раскрывает смысл термина «64 бита». В статье кратко рассмотрена история развития 64-битных систем, описаны наиболее распространенные на данный момент 64-битные процессоры архитектуры Intel 64 и 64-битная операционная система Windows.
Читать дальше →
Total votes 126: ↑108 and ↓18 +90
Views 73K
Comments 82

Причины, по которым 64-битные программы требуют больше стековой памяти

Intel corporate blog

В форумах люди часто упоминают, что 64-битные версии программ поглощают больший объем памяти и стека. При этом обычно ссылаются на то, что размеры данных стали в 2 раза больше. Однако это необоснованное утверждение, так как размер большинства типов (char, short, int, float) в языке Си/Си++ остался прежним на 64-битных системах. Конечно, например, увеличился размер указателей, но ведь не все данные в программе состоят из указателей. Причины роста потребляемой памяти и стека более сложны. Я решил подробнее исследовать данный вопрос.

В данной заметке я поговорю о стеке, а в будущем планирую обсудить выделение памяти и размер двоичного кода. И еще хочу сразу заметить, что статья посвящена языку Си/Си++ и среде разработки Visual Studio.

Различия в использовании стека Win32 и Win64 приложениями
Total votes 85: ↑81 and ↓4 +77
Views 26K
Comments 31

Самообман простоты

Intel corporate blog

В статье рассматривается проблема превышения сроков создания программ как результат самообмана: будто бы программирование — это просто, и даже еще проще. Создатели новых технологий в области разработки программного обеспечения уверяют, что их технология поможет решить огромное количество проблем и что теперь разработка программного обеспечения становится как никогда простым и быстрым процессом. Но практика неумолима. Вновь и вновь срываются сроки завершения очередного программного проекта.
Читать дальше →
Total votes 87: ↑76 and ↓11 +65
Views 24K
Comments 30

Поиск явного приведения указателя к 32-битному типу

Intel corporate blog
Тихоходка (лат. Tardigrada)
В компиляторе Visual Studio C++ имеется warning C4311 ('variable': pointer truncation from 'type' to 'type') предназначенный для выявления ошибок приведения указателя к 32-битным типам данных. В Intel C++ этому предупреждению соответствует warning #810. Пример обнаруживаемого дефекта:

void *ptr = x;
int y = (int)ptr;

В Win64 размер указателя стал 64-битным, а размер int остался по-прежнему 32 бита. Явное приведение типа обрежет значение указателя, что приведет к ошибке, если указатель ссылается на объект находящимся за пределами младших 4 Гбайт памяти (0x00000000FFFFFFFF).

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

Читать дальше →
Total votes 54: ↑43 and ↓11 +32
Views 9.8K
Comments 42

Apple первой начала выпускать 64-битный ARM-чип!

Computer hardware CPU IT-companies
Сегодня прошла презентация на которой Apple представила iPhone 5S, iPhone 5C и релиз iOS 7.
И немногие обратили внимание на то, что сегодня был представлен первый в мире 64-битный ARM-чип — Apple A7!

Многие задаются вопросом — зачем же нужно было для смартфона iPhone 5S разрабатывать именно 64-битный чип? И конечно же сегодня такой мощный чип смартфонам особо и не нужен, но это явный задел на будущее, потому как:
* Во-первых: разработка реального 64-битного софта это дело не быстрое — см. статью «64 бита»;
* А во-вторых: на самой презентации Apple сама заявляет, что 64-битный чип — это Desktop-class architecture! — см. фотки презентации например здесь: «Сделать день ярче»: трансляция сентябрьского «спешала» в Купертино!
А из этого мы можем сделать вывод что 64-битные чипы Apple A7 в будущем, возможно в несколько переработанном виде, по новому техпроцессу и с повышенной частотой, могут быть использованы Apple не только в смартфонах, но также и в ноутбуках, и в десктопах, и даже в микросерверах.

И этим самым Apple явно демонстрирует, что они всерьёз и надолго занялись разработкой процессоров, а возможно что процессоростроение становится одним из ключевых столпов всего бизнеса Apple (тем самым они становятся косвенными конкурентами таких гигантов как: NVidia, AMD, и даже Intel).
Читать дальше →
Total votes 133: ↑96 and ↓37 +59
Views 46K
Comments 304

C++11 и 64-битные ошибки

PVS-Studio corporate blog Programming *C++ *
CryEngine 3 SDK and PVS-Studio
Мы решили сделать небольшую паузу в тематике статического анализа кода. Ведь блог C++ читают и те, кто пока еще не использует эту технологию. А между тем в мире C++ происходят явления, которые оказывают влияния на такую «устоявщуюся» тему, как 64-битный мир. Речь идет о том как стандарт C++11 влияет и помогает (если есть чем) в разработке корректных 64-битных программ. Сегодняшняя статья как раз об этом.
Читать дальше →
Total votes 83: ↑66 and ↓17 +49
Views 34K
Comments 21

Хвостовая рекурсия в C++ с использованием 64-битных переменных — Часть 1

PVS-Studio corporate blog Assembler *Compilers *
Translation
В этот раз я хочу поделиться с вами одной проблемой, с которой столкнулся, когда решил сравнить итерационные и рекурсивные функции в C++. Между рекурсией и итерацией есть несколько отличий: о них подробно рассказано в этой стать. В языках общего назначения вроде Java, C или Python рекурсия довольно затратна по сравнению с итерацией из-за необходимости каждый раз выделять новый стековый фрэйм. В C/C++ эти затраты можно легко устранить, указав оптимизирующему компилятору использовать хвостовую рекурсию, при которой определенные типы рекурсии (а точнее, определенные виды хвостовых вызовов) преобразуются в команды безусловного перехода. Для осуществления такого преобразования необходимо, чтобы самым последним действием функции перед возвратом значения был вызов еще одной функции (в данном случае себя самой). При таком сценарии безусловный переход к началу второй подпрограммы безопасен. Главный недостаток рекурсивных алгоритмов в императивных языках заключается в том, что в них не всегда возможно иметь хвостовые вызовы, т.е. выделение места для адреса функции (и связанных с ней переменных, например, структур) на стеке при каждом вызове. При слишком большой глубине рекурсии это может привести к переполнению стека из-за ограничения на его максимальный размер, который обычно на порядки меньше объема оперативной памяти.
Читать дальше →
Total votes 17: ↑17 and ↓0 +17
Views 16K
Comments 4

Хвостовая рекурсия в C++ с использованием 64-битных переменных — Часть 2

PVS-Studio corporate blog Assembler *Compilers *
Translation
В прошлой заметке я рассказывал о проблемах с рекурсией в функции Фибоначчи при использовании 64-битных переменных в качестве ее аргументов и компиляции кода с помощью Microsoft Visual C++. Выяснилось, что компилятор включает хвостовую рекурсию, когда используются 32-битные переменные, но не делает этого при переходе к 64-битным. На всякий случай напомню, что хвостовая рекурсия – это оптимизация, производимая компилятором, при которой некоторые виды хвостовых вызовов преобразуются в безусловные переходы. Узнать больше о хвостовой рекурсии.
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Views 9.6K
Comments 6