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

本文共 954 字,大约阅读时间需要 3 分钟。

size_t ksize(const void *block) 这个函数可以返回用kmalloc 申请memory的size其使用的例程如下:static int expand_corename(struct core_name *cn, int size){	char *corename = krealloc(cn->corename, size, GFP_KERNEL);	if (!corename)		return -ENOMEM;	if (size > core_name_size) /* racy but harmless */		core_name_size = size;	cn->size = ksize(corename);	cn->corename = corename;	return 0;}其源码分析如下:/* can't use ksize for kmem_cache_alloc memory, only kmalloc */size_t ksize(const void *block){	struct page *sp;	int align;	unsigned int *m;	#形参为null,如果是debug版本的话,则会打印callstack	BUG_ON(!block);	#这里#define ZERO_SIZE_PTR ((void *)16)	if (unlikely(block == ZERO_SIZE_PTR))		return 0;	#得到形参的page	sp = virt_to_page(block);	#如果这个page 不属于slab,则这几返回复合页	if (unlikely(!PageSlab(sp)))		return PAGE_SIZE << compound_order(sp);	#计算最大的对齐size	align = max_t(size_t, ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);	m = (unsigned int *)(block - align);	#这里就返回通过kmalloc的size	return SLOB_UNITS(*m) * SLOB_UNIT;}

转载地址:http://egjmi.baihongyu.com/

你可能感兴趣的文章
cocos2dx2.X 编译时,传递编译选项
查看>>
ccCArray.cpp 文件
查看>>
cocos2dx 屏幕大小
查看>>
libgdx: 2D Particle Editor工具使用
查看>>
eclipse 给jar库添加源码
查看>>
3.0正式版环境搭建(4)-- 运行(3)创建的工程
查看>>
C++ 枚举声明 enum 和 enum class
查看>>
Python optionParser模块的使用方法
查看>>
android 消灭星星出错
查看>>
PyCharm 教程(三)Hello world!
查看>>
PyCharm: 显示源码行号
查看>>
cocos2dx使用第三方字库.ttf,需要注意的事项
查看>>
cocos2dx 音频模块分析(4): 音效部分
查看>>
cocos2dx 音频模块分析(5): 音效部分
查看>>
19、Cocos2dx 3.0游戏开发找小三之Action:流动的水没有形状,漂流的风找不到踪迹、、、
查看>>
cocos2.X版本lua端使用定时器的方法
查看>>
lua math.fmod使用注意小数问题
查看>>
lua 时间转化
查看>>
lua学习笔记之五(Lua中的数学库)
查看>>
dos: tree命令生成目录结构
查看>>