c语言中数组对齐,c – 数组的内存对齐方式

我无法在Cell处理器上调整DMA传输的内存.我需要地址的最后4位为0.

我有4个unsigned int数组,其中每个元素必须在内存中对齐,以使其(hex)地址以零结尾.

例如.

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

这里的问题是每个数组的第二个元素似乎不是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