【ucos】uCOS-III内存管理OSMemCreate单链表创建的解释

本文介绍了uCOS-III内存管理中关于数据对齐和内存块大小的要求。在内存管理中,数据对齐对于提高效率至关重要,而内存块大小至少为指针大小并为指针大小的整数倍。文章还探讨了如何通过单链表将内存块串联起来,特别是如何将下一个内存块的地址存储在前一个内存块的首4个字节中,以及如何利用指针和指向指针的指针来实现这一过程。
摘要由CSDN通过智能技术生成

【ucos】ucos内存管理OSMemCreate单链表创建的解释

内存管理的背景知识

数据对齐

内存管理提到了对数据对齐的概念。简单介绍一下,STM32F4是32位CPU,因而可以得知它的数据总线是32位的也就是说一次可以读取4个字节的内存数据。这就有一个问题了,每一次读取是从哪里开始读4个字节呢?硬件的底层明确了是从4的倍数处读取4个字节。
如果我要读取一个字节的数据,就会一次性读取它所在的地址为x至x+3这4个字节(x是4的倍数,如0,4,8…)。然后剔除不要的部分得到我想要的数据。
如果我要读取两个字节的数据呢?问题来了,假如我正好一个字节在x至x+3,一个字节在x+4至x+7,这就意味着硬件要进行2次读取操作,以及剔除、拼接操作,这些都是很费时的;内存对齐简单理解,就是数据的地址会放在4的倍数处,这样对于2个字节或者4个字节的数据都只需要一次读取就可以完成。,大大提高了效率。
ucos的内存管理要求在申请一段空间并将其初始化为内存分区时要保证数据对齐,也就是说你的数组首地址一定是4的倍数。

内存块大小

另外就是对内存块的大小的要求。对于32位的CPU,它支持的地址空间为4GB,原因就是支持32位的寻址操作,也就意味着指针类型void*的默认类型等价于32位无符号整型。内存块在没有使用的时候会和ucos的消息池比较相似,将未使用的内存块链接成单链表,这样方便获取和回收。
因此内存块在未使用时,它的空间一定是能够放下一个指向下一个内存块的指针,也就是4个字节。综合数据对齐的概念,内存块的大小不得小

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值