void *__init alloc_large_system_hash(const char *tablename,
unsigned long bucketsize,
unsigned long numentries,
int scale,
int flags,
unsigned int *_hash_shift,
unsigned int *_hash_mask,
unsigned long low_limit,
unsigned long high_limit)
1、tablename就不用解释了,就是个名字
2、bucketsize这个是每个元素的尺寸
3、numentries这个是元素的个数,可以取0,由系统来确定,这时可能即使你给了值,系统也会把它变为最接近的2的幂
4、scale散列度,根据scale获得数组元素个数,取值有13、14、15、17之类的,numentries >>= (scale - PAGE_SHIFT)。
这个值越大,分配的数组元素越少。
5、flags,可取HASH_EARLY或0。
#define HASH_EARLY 0x00000001 /* Allocating during early boot? */
#define HASH_SMALL 0x00000002 /* sub-page allocation allowed, min shift passed via _hash_shift /
6、_hash_shift,用于返回元素个数的以2为底的对数,也就是表示元素个数这个数值所用的比特数
7、_hash_mask,用于返回*_hash_shift个比特所能表示的最大数-1
8、low_limit,high_limit,哈希表表元数上下限,不是分配内存的总尺寸,不要弄混了。如果给个0值,那么系统使用1/16内存所能容纳的元素数作为哈希表表元数。
alloc_large_system_hash
最新推荐文章于 2022-08-11 14:51:25 发布