Speicher Ausrichtung von arrays

Ich habe Probleme bei der Angleichung der Speicher für DMA-transfer auf den Cell-Prozessor. Ich brauche die letzten 4 bit der Adresse auf 0 ein.

Ich habe 4 arrays von unsigned int wo jedes element muss ausgerichtet im Speicher, so dass seine (hex) Adresse endet mit einer null.

E. g.

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

Hier das problem, dass das 2. element jedes array scheint es nicht zu sein, 16-bit-ausgerichtet (Ihre Adresse' - Ende mit einem 4).

Brauche ich die Adressen, die wie folgt Aussehen:

a[0] = 0xXXXXXXX0
b[0] = 0xXXXXXXX0
c[0] = 0xXXXXXXX0
d[0] = 0xXXXXXXX0
a[1] = 0xXXXXXXX0
b[1] = 0xXXXXXXX0
c[1] = 0xXXXXXXX0
d[1] = 0xXXXXXXX0
  • (aligned (16)) bedeutet " ausrichten auf 16-byte-Grenzen.
  • Die Adressen, die Sie haben wollen, enden mit 0. Das heißt, Sie müssen 16-byte-alignment, nicht 16-bit-Ausrichtung. Nur eine Korrektur
InformationsquelleAutor Snps | 2014-04-29
Schreibe einen Kommentar