我有:
char buffer[512 + 12];
我试图强制 buffer
对齐 16 个字节(意思是 - 零是最后 4 位)。
所以我尝试了:
buffer = (char*)(((uint32_t)buffer +12)) & ~0xF);
但是我得到了赋值中不兼容的类型
我猜这是因为 char[] 和 char* 不是同一类型。我该如何解决这个问题?
最佳答案
那么你需要添加 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)));
关于C - 指针算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18426996/