Dlaczego dopełnienie musi być potęgą dwóch?
Robię kilka przykładowych programów do zbadania C i chciałbym wiedzieć, dlaczego wypełnianie struktury może być wykonywane tylko w potędze dwóch.
#include <stdio.h>
#pragma pack(push, 3)
union aaaa
{
struct bbb
{
int a;
double b;
char c;
}xx;
float f;
};
#pragma pack(pop)
int main()
{
printf("\n Size: %d", sizeof(union aaaa));
return 0;
}
Podczas kompilacji
warning: alignment must be a small power of two, not 3 [-Wpragmas]
warning: #pragma pack (pop) encountered without matching #pragma pack (push) [-Wpragmas]
Wygląda na to, że #pragma nie działa. Wyjście jest tylko 24. tj. wyrównane 4 bajty.