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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值