Speicherausrichtung von Arrays

Ich habe Probleme beim Anpassen des Speichers für die DMA-Übertragung auf dem Zellenprozessor. Ich brauche die letzten 4 Bits einer Adresse, um 0 zu sein.

Ich habe 4 Arrays vonunsigned int wo jedes Element sein mussausgerichtet im Speicher, so dass seine (hex) Adresse mit einer Null endet.

Z.B.

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;
}

Ausgabe:

a[0] = 0x10010b60
b[0] = 0x10010b50
c[0] = 0x10010b40
d[0] = 0x10010b30
a[1] = 0x10010b64
b[1] = 0x10010b54
c[1] = 0x10010b44
d[1] = 0x10010b34

Das Problem hierbei ist, dass das 2. Element jedes Arrays nicht 16-Bit-ausgerichtet zu sein scheint (ihre Adresse endet mit einer 4).

Ich brauche die Adressen, um so auszusehen:

a[0] = 0xXXXXXXX0
b[0] = 0xXXXXXXX0
c[0] = 0xXXXXXXX0
d[0] = 0xXXXXXXX0
a[1] = 0xXXXXXXX0
b[1] = 0xXXXXXXX0
c[1] = 0xXXXXXXX0
d[1] = 0xXXXXXXX0

Antworten auf die Frage(3)

Ihre Antwort auf die Frage