博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OK6410A 开发板 (三) 22 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 malloc
阅读量:4285 次
发布时间:2019-05-27

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

malloc 系统 分为两部分	board_init_f 过程中 malloc的初始化和消费者	board_init_r 过程中 malloc的初始化和消费者

两套malloc的初始化

board_init_f	initf_malloc		common/dlmalloc.c		gd->malloc_limit = 0x100000;		gd->malloc_ptr = 0;	reserve_malloc		common/board_f.c		gd->start_addr_sp = reserve_stack_aligned((1024*1024));---board_init_r	initr_reloc		gd->flags |= GD_FLG_RELOC | GD_FLG_FULL_MALLOC_INIT;	initr_malloc		common/board_r.c		malloc_start = gd->relocaddr - TOTAL_MALLOC_LEN;		mem_malloc_init	common/dlmalloc.c			mem_malloc_start = start;			mem_malloc_end = start + size;			mem_malloc_brk = start;			memset((void *)mem_malloc_start, 0x0, size);			malloc_bin_reloc();				// null可以看到每一套malloc 的初始化 都只是初始化了一些全局变量,划分了一部分内存用于malloc并没有将 这部分内存 进行初始化管理,例如 malloc 内存的分区 和  相关数据结构的初始化

两套malloc的消费者

  • 两套提供的api
消费者都调用 malloc 进行内存分配, common/dlmalloc.c L1273 中定义了 mallocVoid_t* mALLOc(size_t bytes)L918 # define mALLOc     malloc
  • 两套的malloc 流程
board_init_f 过程中malloc 																common/dlmalloc.c	if (!(gd->flags & GD_FLG_FULL_MALLOC_INIT))	malloc_simple(bytes); 											common/malloc_simple.c		alloc_simple(bytes, 1);										common/malloc_simple.c			addr = ALIGN(gd->malloc_base + gd->malloc_ptr, align);			new_ptr = addr + bytes - gd->malloc_base;			ptr = map_sysmem(addr, bytes);			gd->malloc_ptr = ALIGN(new_ptr, sizeof(new_ptr));		总结 : 看起来是很简单的malloc		// 从 为 malloc 分配的内存空间,最低位置开始分配		// 不断的往上堆积 被 malloc 的空间malloc	nb = request2size(bytes);										common/dlmalloc.c	if (is_small_request(nb)){
common/dlmalloc.c // do something }else{
// do simething }
  • 两套的消费者
第一套的消费者	initf_dm -> dm_init_and_scan -> dm_init -> device_bind_by_name -> device_bind_common -> calloc(common/dlmalloc.c) -> malloc第二套的消费者	initr_dm -> dm_init_and_scan -> dm_init -> device_bind_by_name -> device_bind_common -> calloc(common/dlmalloc.c) -> malloc

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

你可能感兴趣的文章
数据挖掘十大算法----EM算法(最大期望算法)
查看>>
android StrictMode应用
查看>>
TabHost的两种使用方法
查看>>
Android---TextView属性详解
查看>>
K近邻算法基础:KD树的操作
查看>>
数据挖掘十大算法--K近邻算法
查看>>
android对话框(Dialog)的用法
查看>>
Android使用Application总结
查看>>
android启动第一个界面时即闪屏的核心代码(两种方式)
查看>>
数据挖掘十大经典算法(详解)
查看>>
数据挖掘十大算法--K-均值聚类算法
查看>>
java中常用的日期格式化(全)
查看>>
POI操作Excel导入和导出
查看>>
java的md5加密算法代码
查看>>
jdbc连接数据库
查看>>
Android开发四大组件概述
查看>>
Hadoop主要子项目介绍(Pig Zookeeper Hbase Hive Sqoop Avro Chukwa Cassandra )
查看>>
Android四大组件--Activity详解
查看>>
android四大组件--android service详解
查看>>
android service 例子(电话录音和获取系统当前时间)
查看>>