检查指针是不是为 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 过度对齐的任何类型。然后,如果pN 对齐,则(char*)p+k*N 与定义了总和的任何整数k 对齐。如果您做任何有趣的事情,您的程序逻辑必须在需要的地方保留对齐;你不能测试它。

【讨论】:

以上是关于检查指针是不是为 64 字节对齐时出错 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java 类的内存对齐

指针占的字节数和内存对齐

OS X - x64:堆栈不是 16 字节对齐错误

字节对齐

解码某些 Base64 字符串时出错,但不是其他字符串

c指针-专题