gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:50:34 26 4
gpt4 key购买 nike

在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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com