刚从Java转到C不久,发现宏是个好东西,可以有效的组织代码。
今天在读Nginx的code的时候发现ngx_config.h中有这样一个宏定义:
#define ngx_align(d, a) (((d) + (a - 1)) & ~(a - 1))
意思是以a为对齐因子,申请d大小的pool空间,实际至少需要分配多大pool空间来实现内存对齐。
例如,按16字节对齐,申请56个字节的空间,为了内存对齐实际分配的是64字节。
之所以 d 要加上 a-1,是要d%a的进位。