Linux kernel中常见的宏整理 - yooooooo - 博客园中看到roundup和ALIGN宏功能类似,便做了个对比。
在O3优化,#define SZ 4
的情况下,截取部分汇编代码如下
int r0 = (r + SZ - 1) / SZ * SZ;
被编译成
leal 6(%rax), %edx
addl $3, %eax
leaq .LC0(%rip), %rsi
movl $1, %edi
cmovns %eax, %edx
xorl %eax, %eax
andl $-4, %edx
int r0 = (r + SZ - 1) & (~(SZ - 1));
被编译成
leal 3(%rax), %edx
leaq .LC0(%rip), %rsi
movl $1, %edi
xorl %eax, %eax
andl $-4, %edx
好像差别也不是很大,推测当对齐到2的次方时,会触发编译器的很多优化