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


При этом, если при размещении массива выделяется сплошной участок памяти и данные в нем размещаются подряд, без пропусков, то при размещении структур гарантии непрерывного размещения нет. Причиной появления неиспользованных участков памяти («дыр») могут явиться требования выравнивания данных по границам участков адресного пространства.


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


Таким образом, объем памяти, занимаемой структурой, может не совпадать с суммой объемов ее элементов. Узнать его можно с помощью операции sizeof.


Пусть задана структура и переменная структурного типа.


Ассоциативная связь


struct student s1;

Объем памяти, занимаемой структурной переменной равен:


sizeof (struct student), либо

sizeof (s1).


На рисунке изображено возможное размещение объекта типа struct student в памяти



Названия элементов

surname

name

sex

age

height

weight

mark

Типы

char[15]

char[10]

char

дырка

int

float

float

float

Количество байтов

15

10

1

4

4

4

4