日期:2014-05-16  浏览次数:20813 次

linux kernal 2.6中内存管理中的一点疑问
最近正在看linux2.6内存管理部分的源码,看到setup_cpu_cache时,觉得非常的晦涩,特别是下面index_of函数,让我不知所云,不知哪位大牛能给我稍微解释一下,或者给我一个关于这一部分比较详细的注释。不甚感激。
我的邮箱xiahui1982@gmail.com

附:index_of源码


static   __always_inline   int   index_of(const   size_t   size)

{

extern   void   __bad_size(void);


if   (__builtin_constant_p(size))   {

int   i   =   0;


#define   CACHE(x)   \

if   (size   <=x)   \

return   i;   \

else   \

i++;

#include   "linux/kmalloc_sizes.h "

#undef   CACHE

__bad_size();

}   else

__bad_size();

return   0;

}

------解决方案--------------------
厉害呀,
我也学习一下,
------解决方案--------------------
这段代码看起来很简单, 只不过没有上下文, 也不好解释.
楼主有没有上下文的代码?
------解决方案--------------------
有一个元素size的数组,linux/kmalloc_sizes.h中定义了数组中的各size元素的值,而index_of(size)则返回某一size在这个数组中的索引。比如小于32的size返回0,32 <size <64返回1,..依次类推.新鲜的是kmalloc_sizes.h中并未按通常方法定义数组,这是因为有一些例外情况(#if ...#endif)以及为节省内存空间考虑。
------解决方案--------------------
up