摘要: 1 #define PERF_ALIGN(x, a) __PERF_ALIGN_MASK(x, (typeof(x))(a)-1)2 #define __PERF_ALIGN_MASK(x, mask) (((x)+(mask))&~(mask))返回以a字节对齐需要的字节数,结果类似于roundup,例如:PERF_ALIGN(9, 4) = 12;PERF_ALIGN(11, 4) = 12;PERF_ALIGN(6, 2) = 6;1 #define roundup(x, y) \2 ( ... 阅读全文
posted @ 2013-12-27 10:40 ★行云流水★ 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 在linux\kernel.h中,有这么一个宏:1 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))意为向上取整,网上解释如下:1. 问题A,B都是整数并且 A>1, B>1求 ┌ A/B ┐ 即 A/B 的上取整。当 A/B 整除,往上取整返回值 为 A/B。当 不整除,返回值是 int(A/B) + 1这个算法的一个应用:如果你有一个动态增长的缓冲区,增长的步长是 B,某一次缓冲区申请的大小是 A,这个时候,就可以用这个算法,计算出缓冲区的一个合适大小了,正好可以容纳A,并且不会过于得多,多余部分不会比B多。2. 方法int( 阅读全文
posted @ 2013-12-27 10:01 ★行云流水★ 阅读(9352) 评论(0) 推荐(0) 编辑
摘要: 一、1 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址;4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型;巧妙之处在于将0转换成(TYPE*),结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址。举例说明: 1 #include 阅读全文
posted @ 2013-12-27 09:36 ★行云流水★ 阅读(288) 评论(0) 推荐(0) 编辑