русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Выделение памяти для структур.


Дата добавления: 2013-12-23; просмотров: 1382; Нарушение авторских прав


Struct

{ определения_элементов }

список _структур;

 

В качестве примера определим структуры, описывающие конфигурацию персонального компьютера с такими характеристиками:

• тип процессора (char[10]);

• рабочая частота в МГц (int);

• объем основной памяти в Мбайтах (int);

• емкость жесткого диска в Мбайтах (int).

Пример определения структур безымянного типа:

 

 

В данном случае введены три структуры (три объекта) с именами IBM_486, IBM_386, Compaq. В каждую из определенных структур входят элементы, в которые можно будет занести сведения о характеристиках конкретных ПЭВМ. Структурный тип "компьютер" не именован. Поэтому, если в программе потребуется определять другие структуры с таким же составом элементов, то придется полностью повторить приведенное выше определение структурного типа.

Выделение памяти для структур.Мы уже договорились, что определение структурного типа не связано с выделением памяти, а при каждом определении структуры (объекта) ей выделяется память в таком количестве, чтобы могли разместиться данные всех элементов. На рис. 6.1 приведены условные схемы распределения памяти для одного из объектов (структур) типа goods. На первой схеме элементы структуры размещены подряд без пропусков между ними. Однако никаких гарантий о таком непрерывном размещении элементов структур стандарт языка Си не дает. Причиной появления неиспользованных участков памяти ("дыр") могут явиться требования выравнивания данных по границам участков адресного пространства. Эти требования зависят от реализации, от аппаратных возможностей системы и иногда от режимов (опций) работы компилятора. На рис. 6.1 условно изображен и второй вариант с пропуском участка памяти между элементами floatpercent и int vol. Пропуск ("дыра") может быть и после последнего элемента структуры. В этом случае память для следующего объекта, определенного в программе, будет выделена не сразу после структуры, а с промежутком, оставляемым для выравнивания по принятой границе участка адресного пространства.



Необходимость в выравнивании данных зависит от конкретной задачи. Например, доступ к целым значениям выполняется быстрее, если они имеют четные адреса, т.е. выравнены по границам машинных слов. Противоположное требование состоит в плотной "упаковке" информации, когда идет борьба за уменьшение объема, занимаемого в памяти структурой или массивом структур. Влиять на размещение структур можно с помощью препроцессорной директивы #pragma(см. гл. 3).

 

Определение структурного типа:

structgoods { char*name; long price; float percent;

int vol;chardate[9]

};

 

 

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

 

 

Рис. 6.1.Размещение структуры типа goods в памяти (размеры в байтах для разных реализаций могут быть другими)

 

В зависимости от наличия "пропусков" между элементами изменяется общий объем памяти, выделяемый для структуры. Реальный размер памяти в байтах, выделяемый для структуры, можно определить с помощью операции

sizeof(имя_структуры)

sizeof(имя_структурного_типа)

 

Для нашего примера одинаковые результаты дадут операции:

 

 

В последнем выражении имя структуры coat только для разнообразия помещено без скобок. Напомним, что операция определения размера имеет две формы:

sizeof(имя_типа_данных)

sizeofвыражение

 

В случае операнда-выражения его не обязательно заключать в скобки и его значение не вычисляется. Для него определяется тип и оценивается его размер (в байтах).



<== предыдущая лекция | следующая лекция ==>
Определение структур. | Доступ к элементам структур.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.