c - 如何使用 <linux/hash.h> 中的 hash_ptr() 函数

标签 c hash linux-kernel

根据 hash.h,hash_ptr() 看起来像这样:

static inline unsigned long hash_ptr(const void *ptr, unsigned int bits)

我只是对参数的作用有点困惑。显然,void *ptr 指向要散列的数据。我的问题是该函数如何知道数据在哪里结束?如果假设使用 cstrings(即寻找 NULL 字节),那么为什么要使其成为 void 指针?

这就是下一个参数的用武之地:int bits 参数是否告诉您数据持续了多长时间?我认为int bits参数指定返回值,例如,如果我的哈希数组只有63个槽,那么我可以指定5作为位数。我只是有点困惑这个函数是如何工作的,并且没有任何手册页或任何东西......

编辑: 好的,既然 hash_ptr 只对指针地址进行哈希处理,那么如何在内核编程空间中对字节数组或 C 字符串进行哈希处理呢?

最佳答案

它不会对指针处的值进行哈希处理;它以与平台(大小)无关的方式对指针本身进行哈希处理。

我的看起来像这样:

static inline unsigned long hash_ptr(const void *ptr, unsigned int bits)
{
    return hash_long((unsigned long)ptr, bits);
}

关于c - 如何使用 <linux/hash.h> 中的 hash_ptr() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22155954/

相关文章:

c - 最低 504Kb 内存使用量

c - 在C中增加指针地址和值

java - 字符串在 Java 哈希表中出现的次数

python - 密码哈希程序

Linux内存分段

linux - 如何通过 Bus、Device、Function 和 Offset 获取物理地址

C++浮点精度

C&Mac : trouble finding a header using pkg-config

c# - "distribution of the hash function"是什么意思?

linux - Linux 在哪里设置其内核和用户空间段选择器值?