老样子,上代码,上公式
#ifndef ALIGNED #define ALIGNED(T, A, B) (((A) + (B) - 1) & (~((T)(B) - 1))) #endif
在VC 平台上 我们会这样让内存对其
#pragma pack(n) /* n = 1, 2, 4, 8, 16 */
这里先上一个例子:例如 7, 以4 对齐, 我们知道对齐后的大小是比7大的4的最小的整数倍。
4的二进制是0100, 减一取反 ~(0100-0001)是1100
数字7的二进制是0111
0111 & 1100 = 0100 化成十进制是4,正好是4的倍数。
但我们需要求得是A大的B的最小的整数倍。
我们只要将A = (A+B-1)即可 ②
结合①②
我们得出公式
#ifndef ALIGNED #define ALIGNED(A, B) (((A) + (B) - 1) & (~((B) - 1))) #endif这个公式和我么一开始上的公式有区别T,T是类型,可以是LONG,LONGLONG等,目的是二进制转化后没有符号。
原文地址:http://blog.csdn.net/sqqsongqiqi/article/details/42920699