LINUX.ORG.RU

Есть ли выравнивание данных в C/C++ структурах?


0

0

может ли C/C++ иметь «своё мнение» относительно данных в структуре, то есть, например, если идёт {uint8, uint8, uint8, uint32} вставить лишний байт перед uint32 «для ровного счёту» или ещё что-нибудь?

ну например

typedef struct {
uint64 root_rowid_tail;
uint16 type_id;
uint8 node_slots;
uint32 table_object_id;
uint32 next_index_object_id;
uint16 colnumber;
uint16 index_name_size;
} Tindexinfo_header;

★★★
Ответ на: комментарий от catap

>Структура выравнивается по DWORD. Обычно он равен sizeof(long).

Ну так выравнивается или обычно? Зачем так говрорить?
Могу заверить, что компиляторы hisoft-c или turbo-c не выравнивали ни на dword, ни на sizeof(long) :)

madcore ★★★★★
()
Ответ на: комментарий от catap

> Структура выравнивается по DWORD. Обычно он равен sizeof(long).

Скомпиль в 16 битном режиме следующее: struct {char a; } a;

namezys ★★★★
()
Ответ на: комментарий от catap

> Структура выравнивается по DWORD. Обычно он равен sizeof(long).

struct { char a; } b[100];

namezys ★★★★
()
Ответ на: комментарий от catap

Структура выравнивается по DWORD. Обычно он равен sizeof(long).

Структуры выравниваются по первому члену.

int main()
{
        struct { short i; } a[2];

        printf("%d %p %p\n", sizeof(a[0]), &a[0], &a[1]);
}

2 0xbf93e260 0xbf93e262

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ну то есть ты согласен, что не по DWORD? :)

Да все вроде уже вкурили что по наибольшему.

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от tailgunner

> Ну то есть ты согласен, что не по DWORD? :)

абсолютно и бесповоротно.

limux
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.