Выравнивание массивов памяти

У меня проблемы с выравниванием памяти для передачи 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

Ответы на вопрос(3)

Ваш ответ на вопрос