检查指针是否对齐64字节时出错

use*_*000 0 c pointers

当我检查地址是否为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;

    }

}
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 5

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

if((uintptr_t)ptr % BYTE_ALIGNMENT == 0){
Run Code Online (Sandbox Code Playgroud)

除此之外,对齐方式不可测试。给定类型的已声明对象适合于其类型,并且by获得的内存malloc适用于via不会过度对齐的任何类型_Alignas。然后,如果paligned mod N(char*)p+k*N则针对k为其定义和的任何整数对齐。如果您做任何有趣的事情,您的程序逻辑必须在需要的地方保持对齐;你无法测试