У меня есть следующий код:
#include <stdio.h>
int
main(void)
{
float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0};
printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);
}
И у меня есть следующий вывод:
0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac
Почему адрес a[0]
не кратен 0x1000
?
Что именно делает __attribute__((aligned(x)))
? Я неправильно понял это объяснение?
Я использую gcc 4.1.2.