【问题标题】: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;

    }

}

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    您不能对指针执行算术运算(除了加法和减法,但它们具有特殊含义),因为它们不是数字。如果您正在处理的 C 实现定义了uintptr_t,您可以将它们转换为uintptr_t,并对在某种意义上“应该”与寻址模型匹配的数字执行算术运算。所以:

    if((uintptr_t)ptr % BYTE_ALIGNMENT == 0){
    

    除此之外,对齐不是可测试的。给定类型的声明对象与其类型适当对齐,malloc 获得的内存适用于未通过_Alignas 过度对齐的任何类型。然后,如果pN 对齐,则(char*)p+k*N 与定义了总和的任何整数k 对齐。如果您做任何有趣的事情,您的程序逻辑必须在需要的地方保留对齐;你不能测试它。

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2011-01-31
      • 2012-08-10
      • 2012-03-05
      • 2017-09-27
      • 2012-10-26
      相关资源
      最近更新 更多