1

我有:

char buffer[512 + 12];

而且我试图强制buffer对齐 16 个字节(意思是 - 零是最后 4 位)。所以我尝试了:

buffer = (char*)(((uint32_t)buffer +12)) & ~0xF);

但我越来越incompatible types in assignment

我猜这是因为 char[] 和 char* 不是同一类型。我该如何解决这个问题?

4

1 回答 1

6

那么你需要添加 15 个字节,而不是 12 个字节,它应该是:

char _buffer[512 + 15];

char * const buffer = (char*)(((uintptr_t)_buffer + 15)) & ~0xF);

请注意,原始缓冲区地址无法修改,因此我们调用未对齐缓冲区并在 中的第一个对齐地址处_buffer初始化一个 const 对齐指针。buffer_buffer

以牺牲可移植性为代价,您还可以使用编译器扩展更简单地执行相同的操作,例如在 gcc 和 gcc 兼容的编译器中:

char buffer[512] __attribute__ ((aligned(16)));
于 2013-08-25T08:17:58.870 回答