OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2461|回复: 2

SRAM 内存分配疑问

[复制链接]

33

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
280
金钱
280
注册时间
2013-6-18
在线时间
15 小时
发表于 2016-11-7 23:13:12 | 显示全部楼层 |阅读模式
1金钱
简单明了点,我是初学者,有些小白问题请见谅。
1.原子内存管理程序 以外部SRAM为例
#define MEM1_BLOCK_SIZE                        32                                                           
#define MEM1_MAX_SIZE                        100*1024                                                 
#define MEM1_ALLOC_TABLE_SIZE        MEM1_MAX_SIZE/MEM1_BLOCK_SIZE        

最小内存块32个字节,看了内存分配函数,需要找到连续空的内存块,满足分配内存的大小才能分配。
也就是说分配内存的时候中间肯定有零散的内存块。
一个内存块是32个字节,也就是说我申请一个 U8类型(1byte)的,也会占据一个内存块(好浪费)。

为什么最小内存块为32个byte,如果改小点 4个byte 或 1byte,会不会好点,我也是初学不太懂,想必是有些更生层次的考虑吧,
还望原子哥,指点。

2.内存分配中变量的申请。
__align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));                                       
内存池定义的时候是U8类型。
STM32是32位的,也就是说普通的定义变量u8 /u16/u32 都是占4字节的,在申请内存的时候,

U8 *p1;
p1=mymalloc(sramx,1);//申请1个内存

U16 *p2;
p2=mymalloc(sramx,1);//申请1个内存

U32 *p3;
p3=mymalloc(sramx,1);//申请1个内存

以往定义变量
u8 num1; u16 num2; u32 num3; u8 rxbuf[100];
现在都是用指针,感觉好不习惯,感觉在定义数组的时候,不太直观
U8 *p; 你能告诉我这是什么内类的东西,他只是个指针, U8 (*p)[4] 看见数组指针是这样定义的,所以不直观。

不知大家是怎么解决的,内人C语言功底一般。指针用的少。

我是刚学到这一步,发的帖子没有往下深究,发帖的目的只为互相学习。









最佳答案

查看完整内容[请看2#楼]

第一个问题,内存块做成32字节的目的是为了尽可能的减小内存碎片化,你做成1字节表面上看是省内存,但是随着内存分配的次数增多,你的内存碎片就会越小,极限情况下内存碎片就是1个字节了!至于什么叫内存碎片这些东西百度多找找内存分配算法的设计思路就知道了。至于第二个问题,C语言指针的知识,找本书多看多练,C语言指针在嵌入式开发中非常见,必须掌握!
一知半解!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-11-7 23:13:13 | 显示全部楼层
第一个问题,内存块做成32字节的目的是为了尽可能的减小内存碎片化,你做成1字节表面上看是省内存,但是随着内存分配的次数增多,你的内存碎片就会越小,极限情况下内存碎片就是1个字节了!至于什么叫内存碎片这些东西百度多找找内存分配算法的设计思路就知道了。至于第二个问题,C语言指针的知识,找本书多看多练,C语言指针在嵌入式开发中非常见,必须掌握!
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-11-8 09:46:00 | 显示全部楼层
指针就是指向一片内存区域的头地址,仅此而已。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 21:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表