Выравнивание массивов памяти
У меня проблемы с выравниванием памяти для передачи DMA на процессоре Cell. Мне нужно, чтобы последние 4 бита адреса были равны 0.
У меня есть 4 массиваunsigned int
где каждый элемент должен бытьвыровненный в памяти, чтобы его (шестнадцатеричный) адрес заканчивался нулем.
Например.
int main()
{
size_t i;
static unsigned int a[2] __attribute__ ((aligned (16)));
static unsigned int b[2] __attribute__ ((aligned (16)));
static unsigned int c[2] __attribute__ ((aligned (16)));
static unsigned int d[2] __attribute__ ((aligned (16)));
for (i = 0; i < 2; ++i) {
printf("a[%u] = %p\n", &a[i]);
printf("b[%u] = %p\n", &b[i]);
printf("c[%u] = %p\n", &c[i]);
printf("d[%u] = %p\n", &d[i]);
}
return 0;
}
Выход:
a[0] = 0x10010b60
b[0] = 0x10010b50
c[0] = 0x10010b40
d[0] = 0x10010b30
a[1] = 0x10010b64
b[1] = 0x10010b54
c[1] = 0x10010b44
d[1] = 0x10010b34
Проблема здесь в том, что 2-й элемент каждого массива не выглядит выровненным по 16 битам (их адрес заканчивается 4).
Мне нужно, чтобы адреса выглядели так:
a[0] = 0xXXXXXXX0
b[0] = 0xXXXXXXX0
c[0] = 0xXXXXXXX0
d[0] = 0xXXXXXXX0
a[1] = 0xXXXXXXX0
b[1] = 0xXXXXXXX0
c[1] = 0xXXXXXXX0
d[1] = 0xXXXXXXX0