C语言宏定义:地址对齐到16字节倍数
C语言宏定义:地址对齐到16字节倍数
这段代码定义了两个宏:
ADDR_ALIGN_BASE_16:表示地址对齐的基准值为16。ADDR_ALIGNED_16(addr):表示将给定地址addr向上对齐到16的倍数。
#define ADDR_ALIGN_BASE_16 16
#define ADDR_ALIGNED_16(addr) (UINTPTR)((((addr) + ADDR_ALIGN_BASE_16 - 1) & (0xfffffffffffffff0)))
具体地,ADDR_ALIGNED_16(addr)的实现思路是:
- 将给定地址
addr加上16减1,相当于对齐基准值16进行了上取整。 - 将结果与
0xfffffffffffffff0按位与,相当于将最后4位取0,即向下对齐到16的倍数。
最终返回的是一个无符号整型(UINTPTR)的值,即对齐后的地址。
原文地址: https://www.cveoy.top/t/topic/nXVo 著作权归作者所有。请勿转载和采集!