本文共 853 字,大约阅读时间需要 2 分钟。
void *krealloc(const void *p, size_t new_size, gfp_t flags)用于重新为让p执行一段新申请的内存,但是保持p指针指向内存中的内容不变通俗讲就是为p重新申请一段内存,再将p之前内存中的内容复制过来.void *krealloc(const void *p, size_t new_size, gfp_t flags){ void *ret; #新申请的内存为null的话,则不但不申请新的内存还会释放p之前指向的老的内存 if (unlikely(!new_size)) { kfree(p); return ZERO_SIZE_PTR; } #申请新内存并拷贝内容 ret = __do_krealloc(p, new_size, flags); if (ret && p != ret) kfree(p); return ret;}static __always_inline void *__do_krealloc(const void *p, size_t new_size, gfp_t flags){ void *ret; size_t ks = 0; #直接根据指针就可以知道这个指针的指向memory的size if (p) ks = ksize(p); #如果新申请的size 比原本的size还小,则调整kasan监控的区域后,直接退出。即p指针没有变 if (ks >= new_size) { kasan_krealloc((void *)p, new_size, flags); return (void *)p; } #这里重新申请新的内存 ret = kmalloc_track_caller(new_size, flags); if (ret && p) #内存申请成功的话,则将p中内容copy到新的内存中.保持内容不变. memcpy(ret, p, ks); return ret;}
转载地址:http://hgjmi.baihongyu.com/