kmalloc

    xiaoxiao2021-04-13  29

    vma_filesz = kmalloc_array(segs - 1, sizeof(*vma_filesz), GFP_KERNEL); kmalloc_array 用来申请一个数组 static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags) {     if (size != 0 && n > SIZE_MAX / size)         return NULL;     if (__builtin_constant_p(n) && __builtin_constant_p(size))         return kmalloc(n * size, flags);     return __kmalloc(n * size, flags); } 从kmalloc_array 的实现可以看到,首先慢但size 不能为0,且也不能超过最大的size     if (size != 0 && n > SIZE_MAX / size)         return NULL; 其次判断n和size是否是在编译阶段就可以确定,如果可以确定的话,就调用kmalloc,否则就调用__kmalloc申请内存 static inline void *kcalloc(size_t n, size_t size, gfp_t flags) {     return kmalloc_array(n, size, flags | __GFP_ZERO); } kcalloc 是kmalloc_array的一个包装,及将申请的memory清零  如果在调用kmalloc_array(segs - 1, sizeof(*vma_filesz), GFP_KERNEL);的时候加上flag __GFP_ZERO,则和kcalloc的作用一样 及kmalloc_array(segs - 1, sizeof(*vma_filesz), GFP_KERNEL|__GFP_ZERO)
    转载请注明原文地址: https://ju.6miu.com/read-668789.html

    最新回复(0)