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