c - lab_get_obj()中的slab_bufclt()是什么意思?

标签 c linux memory kernel alloc

在Linux内核中,我们在mm/slab.c中有一个函数

static void *slab_get_obj(struct kmem_cache *cachep, struct slab
*slabp,
                                int nodeid) {
        void *objp = index_to_obj(cachep, slabp, slabp->free);
        kmem_bufctl_t next;

        slabp->inuse++;
        next = slab_bufctl(slabp)[slabp->free];
#if DEBUG
        slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE;
        WARN_ON(slabp->nodeid != nodeid);
#endif
        slabp->free = next;

        return objp; }

哪里,

static inline kmem_bufctl_t *slab_bufctl(struct slab *slabp)
{
        return (kmem_bufctl_t *) (slabp + 1);
}

我不明白slab_bufctl() 的作用或它如何找到下一个可用的slab。

最佳答案

看起来structlab *slabp是一个structslab的数组。因此,slab_bufctl() 中的 (slabp + 1) 仅返回 slabp 旁边的元素。

此外,由于 slab_bufctl() 将元素返回为 kmem_bufctl_t *,稍后将其作为数组访问,我认为我们可以对 进行宽松的定义>结构板如下:

struct slab {
    kmem_bufctl_t *_name;
}

关于c - lab_get_obj()中的slab_bufclt()是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17186074/

相关文章:

c - 在 append/更新模式下是否仍然需要调用文件定位功能?

c++ - 在 Linux 下区分共享驱动器上的文件和文件夹

linux - 在 bash 中从另一个变量创建一个变量

linux - Linux Red Hat 6.0 Enterprise 安装中文语言包

ios - 链式过滤导致内存崩溃

c++ - 如何从进程内部确定 CPU 和内存消耗

c - 如何以编程方式在 Linux 上设置硬件时钟?

转换为 void 不会删除 warn_unused_result 错误

CUDA 警告 "floating-point value does not fit in required integral type"- 为什么?

java - 使用递归单步执行大型目录结构时如何管理 Java 内存