字节对齐的一段代码

64字节对齐,先贴代码:

#define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a)-1)))

#define align_buffer_64(var, size)                                       \
  uint8* var##_mem = (uint8*)(malloc((size) + 63));         /* NOLINT */ \
  uint8* var = (uint8*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */

#define free_aligned_buffer_64(var) \
  free(var##_mem);                  \
  var = 0

以上代码,来自libyuv开源库。

分析之,

1.预先分配size+63个字节的内存;

2.从内存的首地址开始,首先偏移63字节,再取掩码(& ~63)

 

为什么是多分配一部分内存,再偏移。而不先计算好内存长度,再分配内存呢?
 

你可能感兴趣的:(音视频开发学习)