typeof的这个用法没看明白
#define ALIGN(x,a)__ALIGN_MASK(x,(typeof(x))(a)-1)
#define __ALIGN_MASK(x,mask)(((x)+(mask))&~(mask))
BUF_SIZE = ALIGN((640*480),4096);
最后这BUF_SIZE的结果应该是么呀??
[解决办法]
ALIGN((640*480),4096);
==>
__ALIGN_MASK((640*480),(typeof((640*480)))(4096)-1)
==>
(((640*480)+((typeof((640*480)))(4096)-1))&~((typeof((640*480)))(4096)-1))
==>
(640 * 480 + int(4096) - 1) & ~ (int(4096) - 1)
==>
311295 & -4096
==>
0x4BFFF & 0XFFFFF000
==>
0x4B000
==>
307200
基本意思就是把第一个数填充到第二个数的整数倍那么多.
即:
如果 x % a 等于 0, 那么结果就是 x
如果 x % a 不等于 0, 那么结果就是 (x / a + 1) * a (里面的除法是整数除法)
所以如果改成 ALIGN((640 * 480 + 1), 4096) 结果就会是 311296