上界对齐 #define ALIGN(x,a) (((x)+(a)-1)&~(a-1))
就是以a为上界对齐的意思。举个例子4k页面边界的例子,即a=4096:如果x = 3888;那么以上界对齐,执行结果就是4096。如果x = 4096;结果是4096.如果x = 4222; 则结果为8192.
下界对齐 #define ALIGN(x,a) ((x)&~(a-1))
就是以a为下界界对齐的意思。若x = 3888; 结果为0.如果x = 4096;结果是4096.如果x = 4222; 则结果为4096.你可以把这两种方式理解为“上进”和“丢弃”。
在hotspot中的/vm/utilities/globalDefinitions.cpp文件中提供的详细算法如下:
#define align_size_up_(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1))
以alignment为上界进行对齐。
参考文章:
https://www.cnblogs.com/Estrong/articles/2857685.html