前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核 内存管理】memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )

【Linux 内核 内存管理】memblock 分配器编程接口 ① ( memblock 分配器编程接口简介 | memblock_add 函数原型分析 | memblock_add 函数源码 )

作者头像
韩曙亮
发布2023-03-30 14:57:01
3180
发布2023-03-30 14:57:01
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、memblock 分配器编程接口


memblock 分配器提供了如下编程接口 :

① 添加内存 : memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ;

② 删除内存 : memblock_remove 函数 , 删除 内存块区域 ;

③ 分配内存 : memblock_alloc 函数 , 申请分配内存 ;

④ 释放内存 : memblock_free 函数 , 释放之前分配的内存 ;

二、memblock_add 函数原型分析


memblock_add 函数 , 将 内存块区域 添加到 memblock.memory 成员中 , 即 插入一块可用的物理内存 ;

memblock_add 函数原型如下 :

代码语言:javascript
复制
int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)

phys_addr_t base 参数 表示 被添加的 " 内存块 " 的 " 起始地址 " ;

phys_addr_t size 参数 表示 被添加的 " 内存块 " 的 " 大小 " ;

memblock_add 函数 中 , 调用 memblock_add_range 函数 , 将内存块添加到 memblock.memory 中 ;

代码语言:javascript
复制
memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0);

三、memblock_add 函数源码


memblock_add 函数 定义在 Linux 内核源码的 linux-4.12\mm\memblock.c#603 位置 ;

代码语言:javascript
复制
int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)
{
	phys_addr_t end = base + size - 1;

	memblock_dbg("memblock_add: [%pa-%pa] %pF\n",
		     &base, &end, (void *)_RET_IP_);

	return memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0);
}

源码路径 : linux-4.12\mm\memblock.c#603

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、memblock 分配器编程接口
  • 二、memblock_add 函数原型分析
  • 三、memblock_add 函数源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档