| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Viva64: разработка 64-битных приложений.
Евгений Рыжков
|
error V101: Implicit assignment type conversion to memsize type. |
Переходим с помощью клавиши F4 на соответствующее место в коде.
unsigned imageWidth = 1000; unsigned imageHeght = 1000; unsigned bytePerPixel = 3; unsigned maxFrameCountInBuffer; if (IsX64Platform()) { maxFrameCountInBuffer = 2000; } else { maxFrameCountInBuffer = 100; } size_t bufferSize = imageWidth * imageHeght * // 34 bytePerPixel * maxFrameCountInBuffer; |
Ошибка выдается на строку с объявлением переменной bufferSize. Мы видим, что для 64-битной платформы переменная maxFrameCountInBuffer имеет значение 2000. Это вполне допустимо, так как после перемножения всех переменных мы ожидаем получить 64-битное число (размер буфера), но… получим только 32-битное. В результате переменная bufferSize никогда не будет больше 4 гигабайт, хотя сама по себе она представлена 64-битным типом. Обратите внимание, что компилятор даже при самом высоком уровне диагностики ничего не выдает на эту строку. А Viva64 говорит, что здесь ошибка. Если Вы не уверены, что до конца понимаете проблему с разрядностью типов, то нажатие клавиши F1 откроет встроенную справочную систему Viva64, где приводится подробное описание ошибки с рекомендациями по исправлению.
Продолжим исследование примера, для чего нажмем F4 еще раз. Перейдем на сообщение:
error V102: Usage non memsize type for pointer arithmetic. |
Рассмотрим код, который находится в 71 строке:
int domainWidth; int domainHeght; int domainDepth; ... char *buffer; ... char *current = buffer; char *end = buffer; end += domainWidth * domainHeght * domainDepth; // 71 |
Здесь проблема другого вида. Как следует из описания ошибки, для арифметики с указателями используется тип для этого не предназначенный. В данном случае арифметика с указателями ведется с использованием 32-битного типа int, а не 64-битного, как следовало бы. Типы данных, использующиеся для работы с указателями, а также для хранения размеров объектов (например, массивов) в Viva64 называются memsize-типами. В справочной системе подробно рассматривается использование memsize-типов.
Посмотрим в справочной системе, как исправить данную ошибку. В ней приведены рекомендации по изменению типов, участвующих в подобной арифметике. Исправление данного примера заключается в изменении типа переменных domainWidth, domainHeigh, domainDepth на тип ptrdiff_t или использовании явных приведений типов.
Всего же анализатор выдаст на проект PortSample более десятка сообщений об ошибках. А что же компилятор? Компилятор Microsoft Visual C++ 8.0 с включенной диагностикой проблем переноса (ключ /Wp64) и максимальным уровнем диагностических сообщений (/W4) выдает на весь проект… лишь несколько диагностических сообщения, которые также ловятся анализатором Viva64. Это приводит к тому, что при переносе приложений на 64-битную платформу без использования Viva64 большинство ошибок так и останутся не обнаруженными.
Существует для варианта использования Viva64 в процессе разработки: в случае переноса готового 32-битного приложения на 64-битную платформу и в случае разработки нового 64-битного приложения.
Перенос 32-битного приложения целесообразно выполнять так:
В случае разработки нового 64-битного приложения целесообразно не дожидаться окончания этапа разработки, а сразу же использовать Viva64 для контроля разрабатываемого кода. Причем проверять можно как весь проект или решение, так и отдельные наиболее важные участки кода.
Необходимо заметить, что Viva64 не решает всех задач, возникающих при разработке 64-битного программного обеспечения:
Другими словами, исправив с помощью Viva64 все ошибки в коде, не следует считать, что приложение уже готово к выпуску и не нуждается, например, в тестировании. Однако Viva64 может действительно повысить качество разрабатываемого программного обеспечения, уменьшить количество ошибок и в несколько раз ускорить время выпуска продукта на рынок.
Подгрузка через AJAX HTML-кода, содержащег....
При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.
Обзор нового релиза самой мощной Ajax библ....
Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.
Firebug 1.3 и 1.4 alpha — что нового и инт....
Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|