AFAIK __attribute__
сильно зависит от компилятора. С gcc эта программа
#include <stdio.h>
typedef struct st
{
int a;
char b;
} st __attribute__ ((aligned (128)));
static char a;
static st b;
static char c;
static struct st d;
char e;
st f;
char g;
struct st h;
int main()
{
char i;
st j;
char k;
struct st l;
printf("%p %p %p %p\n", &a, &b, &c, &d);
printf("%p %p %p %p\n", &e, &f, &g, &h);
printf("%p %p %p %p\n", &i, &j, &k, &l);
}
дает мне
0x804a100 0x804a180 0x804a188 0x804a18c
0x804a208 0x804a280 0x804a288 0x804a200
0xbfc8d87f 0xbfc8d800 0xbfc8d7ff 0xbfc8d7f4
Что это говорит?
Если действительно используется тип typedef
ed (st
), выравнивание происходит. Если я использую struct st
, это не так.
Если это произойдет, это произойдет с static
переменными, external
только связанными, а также с automatic
(в стеке).
Что меня смущает, так это то, что h
получает адрес раньше других ...