检查指针是不是为 64 字节对齐时出错 [重复]
Posted
技术标签:
【中文标题】检查指针是不是为 64 字节对齐时出错 [重复]【英文标题】:Error when checking pointer is 64 byte aligned or not [duplicate]检查指针是否为 64 字节对齐时出错 [重复] 【发布时间】:2020-01-11 17:12:35 【问题描述】:在检查地址是否为 64 字节对齐时出现编译错误。
错误:二进制表达式的操作数无效('void *' 和 'int')
#define BYTE_ALIGNMENT 64
void *is_mem_aligned(void* ptr)
if(ptr%BYTE_ALIGNMENT == 0)
printf("already aligned %p\n",ptr);
return ptr;
【问题讨论】:
【参考方案1】:您不能对指针执行算术运算(除了加法和减法,但它们具有特殊含义),因为它们不是数字。如果您正在处理的 C 实现定义了uintptr_t
,您可以将它们转换为uintptr_t
,并对在某种意义上“应该”与寻址模型匹配的数字执行算术运算。所以:
if((uintptr_t)ptr % BYTE_ALIGNMENT == 0)
除此之外,对齐不是可测试的。给定类型的声明对象与其类型适当对齐,malloc
获得的内存适用于未通过_Alignas
过度对齐的任何类型。然后,如果p
与N
对齐,则(char*)p+k*N
与定义了总和的任何整数k
对齐。如果您做任何有趣的事情,您的程序逻辑必须在需要的地方保留对齐;你不能测试它。
【讨论】:
以上是关于检查指针是不是为 64 字节对齐时出错 [重复]的主要内容,如果未能解决你的问题,请参考以下文章