内存管理API之kstrdup

char *kstrdup(const char *s, gfp_t gfp)用于申请一段内存将形参s的内容copy到这段新申请的内存中.
其源码分析如下:
/**
 * kstrdup - allocate space for and copy an existing string
 * @s: the string to duplicate
 * @gfp: the GFP mask used in the kmalloc() call when allocating memory
 */
char *kstrdup(const char *s, gfp_t gfp)
{
	size_t len;
	char *buf;
	#形参s 为null的话,就直接返回null
	if (!s)
		return NULL;
	#得到字符串的长度
	len = strlen(s) + 1;
	#根据形参给定的flag gfp 来申请长度为len的内存
	buf = kmalloc_track_caller(len, gfp);
	if (buf)
	#如果buf 为null的话,就通过memcpy 将形参s中的内容copy到新申请的buf中
		memcpy(buf, s, len);
	#返回buf,注意如果kmalloc_track_caller 如果申请到的buf为null的话,通过这里也会返回null
	#所以这个函数返回null 就用两种情况,一种是新参s为null,一种是没有申请到内存为null
	return buf;
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,管理内存的API主要包括以下几种: 1. new/delete运算符:用于动态分配和释放内存空间。通过new运算符可以在堆上动态地分配一块内存,返回指向该内存的指针;通过delete运算符可以释放之前分配的内存,避免内存泄漏。例如: ```cpp int *p = new int; *p = 10; delete p; ``` 2. malloc/free函数:用于动态分配和释放内存空间。malloc函数可以在堆上动态地分配一块内存,返回指向该内存的指针;free函数可以释放之前分配的内存,避免内存泄漏。例如: ```cpp int *p = (int*)malloc(sizeof(int)); *p = 10; free(p); ``` 3. calloc/realloc/free函数:calloc函数用于动态分配一块内存,并将其中的所有位初始化为0;realloc函数用于重新调整之前分配的内存大小;free函数用于释放之前分配的内存,避免内存泄漏。例如: ```cpp int *p = (int*)calloc(1, sizeof(int)); *p = 10; p = (int*)realloc(p, 2 * sizeof(int)); free(p); ``` 4. unique_ptr/shared_ptr/weak_ptr智能指针:用于管理动态分配的内存,避免内存泄漏和悬空指针问题。智能指针是一种封装了指针的类,可以自动释放指针所指向的内存空间。例如: ```cpp std::unique_ptr<int> p(new int(10)); std::shared_ptr<int> q = std::make_shared<int>(20); std::weak_ptr<int> r = q; ``` 以上这些API都可以用于管理内存,但使用方法和适用场景略有不同。在实际开发中,我们需要根据具体需求选择合适的API,避免内存泄漏和悬空指针等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值