roundup和ALIGN的对比

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的次方时,会触发编译器的很多优化

posted @ 2020-12-06 01:11  Tifa_Best  阅读(165)  评论(0编辑  收藏  举报