Warning: session_start(): open(C:\Windows\temp\sess_j5amop18ec2qrtpomh532efrc3, O_RDWR) failed: No space left on device (28) in C:\www\lemma4.1php\login.php on line 15 Warning: session_commit(): open(C:\Windows\temp\sess_j5amop18ec2qrtpomh532efrc3, O_RDWR) failed: No space left on device (28) in C:\www\lemma4.1php\login.php on line 36 Warning: session_commit(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (C:\Windows\temp) in C:\www\lemma4.1php\login.php on line 36 Основы языка Си


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


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


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


Таким образом, объем памяти, занимаемой структурой, может не совпадать с суммой объемов ее элементов. Узнать его можно с помощью операции 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