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

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

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

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

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

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

Инициализация и присваивание структур

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

struct goods {

char * name;//наименование

long price;//оптовая цена

float percent;//наценка в процентах

int vol;//объем партии

char date [9];//дата поставки партии

};

struct goods coat = {

“пиджак черный”, 4000, 7.5, 220, «12.01.97»

};

Стандарт языка С разрешает присваивание структур. Однако для структур не определены операции сравнения даже на равенство. И сравнивать структуры нужно только поэлементно.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: