博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存管理API之krealloc
阅读量:4213 次
发布时间:2019-05-26

本文共 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/

你可能感兴趣的文章
Lua教程:Lua调用C/C++函数(4)
查看>>
win下创建win32控制台工程,执行lua脚本
查看>>
cocos2dx android启动错误
查看>>
eclipse: android rename package name
查看>>
cocos2dx c++调用java思想
查看>>
cocos2dx lua Node节点 私有数据存取
查看>>
lua math.ceil math.ceil
查看>>
cocos2dx CCNode计算node的大小
查看>>
cocos2dx 布局记录(1)
查看>>
lua 多行注释和取消多行注释
查看>>
缩放系数计算
查看>>
cocos2dx --- 按钮点击居中放大
查看>>
cocos2dx menu位置计算
查看>>
cocos2dx资源加载机制(同步/异步)
查看>>
cocos2dx C++调用java -- 字符串传递
查看>>
git学习网站
查看>>
JavaScript 学习网站
查看>>
cocos2dx java调用c++ -- 字符串传递
查看>>
CCScaleTo与CCScaleBy比较
查看>>
cocos2dx CCObject引用计数,内存释放分析(1)
查看>>