АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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

Читайте также:
  1. Infinite USB Memory – флешка с безлимитным объемом памяти 03.03.2010 16:00 Максим Мишенев
  2. V. Различие в отношении к прошлому опыту между образами памяти и образами воображения
  3. БЛУЖДАНИЯ БЕЗ ПАМЯТИ
  4. ВАЛИНОР: Тропы памяти
  5. Величина, обратная емкости памяти
  6. во Всероссийской Вахте Памяти
  7. ВОСКРЕШЕНИЕ В ПАМЯТИ
  8. Выделение
  9. Выделение задач в подсистеме Вентиляции
  10. Выделение закономерностей
  11. Выделение и промывка крахмала.
  12. Выделение лексем из текста программы.

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

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

 

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

struct goods { char* name; long price; float percent;

int vol;chardate[9]

};

 

 

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

 

 

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

 

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

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

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

 

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

 

 

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

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

sizeof выражение

 

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


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)