0

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() が何をするのか、または次の空きスラブをどのように見つけるのかがわかりません。

4

1 に答える 1