Я прошел через this question, чтобы подтвердить свое понимание структуры padding.I теперь сомневаюсь. Когда я делаю что-то вроде этого:Создайте байты заполнения для структуры, вложив его в объединение
#include <stdio.h>
#define ALIGNTHIS 16 //16,Not necessarily
union myunion
{
struct mystruct
{
char a;
int b;
} myst;
char DS4Alignment[ALIGNTHIS];
};
//Main Routine
int main(void)
{
union myunion WannaPad;
printf("Union's size: %d\n\
Struct's size: %d\n", sizeof(WannaPad),
sizeof(WannaPad.myst));
return 0;
}
Выход:
Union's size: 16
Struct's size: 8
я не должен ожидать, что структура были проложенный на 8 байт? Если я явно вложу восемь байтов в структуру, вся цель ее вложения в объединение, подобное этому, будет аннулирована.
Я чувствую, что объявление союза, содержащего структуру и массив символов, размер структуры должен быть, но не является, уступает место более аккуратным кодам.
Есть ли работа для работы, так как мне бы хотелось?
Какой компилятор и какие опции используются? – Matt
Объединение будет достаточно большим, чтобы удерживать любой из внутренних типов, но внутренние типы не будут дополняться, чтобы соответствовать другим внутренним типам. – CoffeeandCode
«* [...] размер [структуры] должен быть [padded] *« Почему? Для чего смысл/использование? Какой будет выигрыш? – alk