Изменения, связанные с устранением неявных допущений относительно предполагаемых размеров элементов данных

Изменения, связанные с устранением неявных допущений относительно предполагаемых размеров элементов данных

Источником многих проблем могут служить различного рода допущения относительно размеров данных. Несколько возможных примеров этого приводятся ниже.

• Тип DWORD больше нельзя использовать при указании размера блоков памяти. Вместо него следует применять типы данных SIZE_T или DWORD64.

• Необходимо тщательно проверять размеры полей, используемых взаимодействующими процессами, независимо от того, выполняются ли они на одной и той же или на разных системах. Так, в главе 12 для того, чтобы перенос программы на системы UNIX или Win64 не приводил к возникновению 64-битовых полей, поля размера в сообщениях сокетов определялись с использованием типа данных LONG32. При организации связи между процессами Windows, использующими разные модели, размеры блоков памяти не должны превышать 2 Гбайт.

• Для вычисления размера структур или типов данных следует использовать функцию sizeof; эти размеры будут разными для Win32 и Win64, если в структуру данных входят указатели или элементы данных SIZE_T. Литеральные константы размеров должны быть исключены (разумеется, этому совету было бы неплохо следовать при любых обстоятельствах).

• Необходимо проверять, не содержаться ли в объединениях, в которых указатели используются совместно с арифметическими типами данными, неявные предположения относительно размеров типов данных.

• Любое приведение типов или иное преобразование, в котором участвуют указатели и данные арифметического типа должно тщательно проверяться. Обратитесь, например, к фрагментам кода, приведенным в разделе "Пример: использование указательных типов данных". 

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

• Указатели выравниваются по 8-байтовым границам, в результате чего дополнение структур, обусловленное выравниванием, может увеличить размер структуры данных сверх необходимого и даже отрицательно повлиять на производительность. Перемещение указателей в начало структуры минимизирует последствия ее "разбухания".

• При выводе на печать указателей вместо спецификатора формата %x используйте спецификатор %p, а при выводе платформо-масштабируемых данных, например типа SIZE_T, — спецификатор %ld.

• Функции setjmp и longjmp должны использовать заголовочный файл <setjmp.h>, а не какие-либо допущения относительно возможного размера переменной jmp_buf, в которой должен храниться указатель.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Несколько слов о данных состояния элементов

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Несколько слов о данных состояния элементов В ASP.NET 2.0 предлагается поддержка состояний элементов управления, а не только состояния представлений. Эта технология оказывается очень удобной при работе с созданными вами Web-элементами управления ASP.NET, которые должны


Использование программы Microsoft Visio для просмотра и изменения схемы базы данных

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

Использование программы Microsoft Visio для просмотра и изменения схемы базы данных Помимо инструментов среды Visual Studio .NET, для создания, просмотра и изменения схем базы данных могут использоваться другие очень удобные средства. Программа Microsoft Visio обладает всеми необходимыми


Создание элементов базы данных с помощью предложения CREATE

Из книги Word 2007.Популярный самоучитель автора Краинский И

Создание элементов базы данных с помощью предложения CREATE Новые элементы базы данных создаются с помощью предложения SQL CREATE. Чтобы создать таблицу, используйте команду CREATE TABLE, за которой введите поля и типы данных, предназначенные для добавления в таблицу. В качестве


Сценарии изменения данных

Из книги Очень хороший самоучитель пользователя компьютером. Как самому устранить 90% неисправностей в компьютере и увеличить его возможности автора Колисниченко Денис Николаевич

Сценарии изменения данных Для внесения изменений в существующую схему базы данных используются сценарии изменения данных. Хотя они могут создаваться вручную, все же предпочтительнее для этого использовать специальные инструменты. В главах 1, "Основы построения баз


Изменение размеров элементов таблицы

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Изменение размеров элементов таблицы Ширину столбцов и высоту строк можно изменять несколькими способами. Самый простой способ– при помощи мыши. Для этого подведите указатель к правой границе столбца или к нижней границе строки. Когда указатель примет форму двойной


Ошибки, связанные с накопителями данных

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Ошибки, связанные с накопителями данных Ошибки, связанные с накопителями данных и файловой системой, представлены в табл. 6.1.Таблица 6.1. Ошибки накопителей


Редактирование элементов данных класса

Из книги MySQL: руководство профессионала автора Паутов Алексей В

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


Включение в класс новых элементов данных

Из книги Серверные технологии хранения данных в среде Windows® 2000 Windows® Server 2003 автора Дайлип Наик

Включение в класс новых элементов данных ClassWizard позволяет включать в класс не только новые методы, но также и элементы данных, связанные с полями диалоговых панелей, форм просмотра и форм для просмотра записей баз данных и полей наборов записей. ClassWizard, использует


Изменения, связанные с использованием API

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

Изменения, связанные с использованием API Наиболее заметные изменения, связанные с использованием API, затрагивают функции управления памятью, введенные в главе 5. В новых определениях в полях счетчиков используется тип данных SIZE_T (см. табл. 16.2). Например, теперь прототип


1.2. Изменения типа данных DECIMAL

Из книги Фотоприколы с помощью Photoshop автора Гурский Юрий Анатольевич

1.2. Изменения типа данных DECIMAL Этот раздел обсуждает характеристики типа данных DECIMAL (и синонимов) в MySQL 5.1, со специфическим отношением к следующим темамМаксимальное число цифр Формат хранения Требования к памятиНенормативное MySQL расширение к верхнему диапазону столбцов


1.4 Структуры данных, связанные с драйверами устройств Windows

Из книги Разработка ядра Linux автора Лав Роберт

1.4 Структуры данных, связанные с драйверами устройств Windows Перед подробным рассмотрением драйверов устройств Windows NT стоит разобраться в некоторых важных структурах данных, которые используются этими драйверами. Каждый драйвер Windows, включая драйверы устройств хранения


68. Широко применяйте assert для документирования внутренних допущений и инвариантов

Из книги Продвижение порталов и интернет-магазинов автора Гроховский Леонид О.

68. Широко применяйте assert для документирования внутренних допущений и инвариантов РезюмеИспользуйте assert или его эквивалент для документирования внутренних допущений в модуле (т.е. там, где вызываемый и вызывающий код поддерживаются одним и тем же программистом или


Урок 12 Проблемы изменения размеров и трансформации изображений

Из книги автора

Урок 12 Проблемы изменения размеров и трансформации изображений На самом деле никаких проблем, связанных с изменением размеров или трансформацией изображений в редакторе Photoshop, нет. Просто так обычно говорят разные умные академики. «Рассмотрим, – говорят, – проблему


Структуры данных, связанные с файловыми системами

Из книги автора

Структуры данных, связанные с файловыми системами В дополнение к фундаментальным объектам подсистемы VFS, ядро использует и другие стандартные структуры данных для управления данными, связанными с файловыми системами. Первый объект используется для описания


Структуры данных, связанные с процессом

Из книги автора

Структуры данных, связанные с процессом Каждый процесс в системе имеет свои открытые файлы, корневую файловую систем); текущий рабочий каталог, точки монтирования и т.д. Следующие три структуры данных связывают вместе подсистему VFS и процессы, которые выполняются в


Риски, связанные с хостингом и потерей данных

Из книги автора

Риски, связанные с хостингом и потерей данных Примерно раз в два года в русскоязычном сегменте Рунета разыгрывается очередная драма, связанная с пожаром в дата-центре, отключением серверов крупного хостинг-провайдера или другими аварийными ситуациями, которые сразу же