搜索
bottom↓
回复: 10

在这里和大家探讨一下malloc函数

[复制链接]

出0入0汤圆

发表于 2012-6-8 14:08:13 | 显示全部楼层 |阅读模式
  大家好:
我们都知道malloc是用来开辟内存空间的,而且是堆内存的空间,在PC机上编程是有堆内存和栈内存的区别的;但是如果我们是在51单片机中编写程序的,那么这malloc是开辟哪里的空间呢,ram的data区呢,还是xdata(如果有xdata的情况),还是先data和xdata都可以,看那里有空间?在51单片机编程中,是否也有堆内存和栈内存的区分,如果有是怎么区分。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-6-8 14:28:22 | 显示全部楼层
我也来和大家调探讨一下,我就是搞不清这Keil究竟把堆放在什么地方了。

出0入0汤圆

发表于 2012-6-8 15:55:08 | 显示全部楼层
一般来说我们在程序里定义的变量都是存放在RAM里的,在定义变量前加const是就刚在ROM里了
RAM区包括单片机本身的RAM和我们外扩的RAM,xdata应该是放在外扩的RAM
一般来说芯片的寄存器和堆栈都是放在RAM的低位空间,具体在什么位置要看芯片手册

出0入0汤圆

发表于 2012-6-8 16:07:45 | 显示全部楼层
这叫探讨?连自己的观点自己的理解都没有,求助就求助

出0入0汤圆

发表于 2012-6-8 16:14:56 | 显示全部楼层
看keil帮助手册,
void xdata *malloc (
  unsigned int size);   /* block size to allocate */
申请内存区域应该在xdata区

出0入54汤圆

发表于 2012-6-8 20:44:11 | 显示全部楼层
有个初始化函数的,你搜索init_mempool

int_mempool(void_MALLOC_MEM_*pool,unsigned int size)
第一个参数表示起始地址,第二个参数表示可分配内存的总大小。

出0入0汤圆

发表于 2012-6-8 22:25:23 | 显示全部楼层
UCGUI的内存管理不错

出0入0汤圆

发表于 2012-6-8 22:52:00 | 显示全部楼层
lusson 发表于 2012-6-8 20:44
有个初始化函数的,你搜索init_mempool

int_mempool(void_MALLOC_MEM_*pool,unsigned int size)

6楼正解!

出0入0汤圆

发表于 2012-6-8 23:01:18 | 显示全部楼层
今天刚看了Keil 的手册,里面关于动态内存管理的部分。keil帮助文档中:
#include <stdlib.h>

void init_mempool (
  void xdata *p,        /* start of memory pool */
  unsigned int size);   /* length of memory pool */
第一个参数已经明确指明了外部RAM。如果没有实现自己的内存管理函数的话,就是在xdata 里的了。另外Keil文档也说了,对于长时间运行的系统来说,不建议用动态内存,因为频繁地申请和释放内存必然导致内存碎片,最后很可能找不到可用的内存了。  6楼说的是。

出0入54汤圆

发表于 2012-6-9 13:05:32 | 显示全部楼层
我之前用过。
在KEIL工程中把一段外部RAM不用,然后初始化POOL到这一段使用。
但后面发现有的时候会出莫名其妙的问题,也有可能是我程序的问题,没去深究。
就自己做了一个简单的,但就是建几个长度不一样的数组去分配,有点死,不过至少没出问题

出0入0汤圆

发表于 2012-6-10 10:56:30 | 显示全部楼层
   那用const的好处倒是不少呀!!!!!!!!!!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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