下面这三个分配的都是kernel内存,不是用户空间的内存
char *kstrdup(const char *s, gfp_t gfp);
功能: 分配一块内存空间(kmalloc + GFP_KERNEL),然后将s指向的字符串拷贝到这块内存,返回该内存的首地址
void *kmemdup(const void *src, size_t len, gfp_t gfp);
功能:分配一块长度为len的内存(kmalloc+GFP_KERNEL),然后将src到(src + len)内存的内容copy到新分配的内存,返回该内存的首地址
void *memdup_user(const void __user *src, size_t len);
功能: 分配一块长度为len的内存(kmalloc + GFP_KERNEL),然后将用户空间的地址src到(src+len)范围的内存使用copy_from_user的方式拷贝到新分配的内存中,返回新分配的内存的首地址
本文探讨了三个内核空间内存分配函数:kstrdup用于字符串复制,kmemdup用于内容复制,memdup_user处理用户空间数据拷贝。重点讲解了它们的工作原理和应用场景。
2237

被折叠的 条评论
为什么被折叠?



