首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

一个细节有关问题 求指教

2012-04-06 
一个细节问题 求指教static inline int slab_order(int size, int min_objects,int max_order, int fract_

一个细节问题 求指教
static inline int slab_order(int size, int min_objects,
int max_order, int fract_leftover)
{
int order;
int rem;
int min_order = slub_min_order;

if ((PAGE_SIZE << min_order) / size > MAX_OBJS_PER_PAGE)
return get_order(size * MAX_OBJS_PER_PAGE) - 1;
for (order = max(min_order,
fls(min_objects * size - 1) - PAGE_SHIFT);
order <= max_order; order++) {

unsigned long slab_size = PAGE_SIZE << order;

if (slab_size < min_objects * size)
continue;

rem = slab_size % size;

if (rem <= slab_size / fract_leftover)
break;

}

return order;
}

MAX_OBJS_PER_PAGE指一个slab(1或多个页组成的大页面)内最多对象数,值为65535,
因为struct page中objects成员为u16类型。如果对象数超出这个上限, 根据上限计算order。

return get_order(size * MAX_OBJS_PER_PAGE) - 1;

虽然这个地方 很难被执行 但是
有没有人注意过这个地方为什么要 减1 ????
减掉1 那不是会导致返回order对应的页面不够来存放MAX_OBJS_PER_PAGE个对象了?

备注:
get_order(0xff) = 0
get_order(0xfff) = 0
get_order(0x5fff) = 3
get_order(0x55fff) = 7



[解决办法]
你是什么?你一上来就是代码,有几个人会看啊,你应该说下你要干嘛?

热点排行