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

2020-02-05 09:07发布

  大家好:
我们都知道malloc是用来开辟内存空间的,而且是堆内存的空间,在PC机上编程是有堆内存和栈内存的区别的;但是如果我们是在51单片机中编写程序的,那么这malloc是开辟哪里的空间呢,ram的data区呢,还是xdata(如果有xdata的情况),还是先data和xdata都可以,看那里有空间?在51单片机编程中,是否也有堆内存和栈内存的区分,如果有是怎么区分。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
billgates
1楼-- · 2020-02-05 13:09
我也来和大家调探讨一下,我就是搞不清这Keil究竟把堆放在什么地方了。
Mavis_zhong
2楼-- · 2020-02-05 17:04
一般来说我们在程序里定义的变量都是存放在RAM里的,在定义变量前加const是就刚在ROM里了
RAM区包括单片机本身的RAM和我们外扩的RAM,xdata应该是放在外扩的RAM
一般来说芯片的寄存器和堆栈都是放在RAM的低位空间,具体在什么位置要看芯片手册
little_Monkey
3楼-- · 2020-02-05 18:00
 精彩回答 2  元偷偷看……
fsmcu
4楼-- · 2020-02-05 18:13
看keil帮助手册,
void xdata *malloc (
  unsigned int size);   /* block size to allocate */
申请内存区域应该在xdata区
lusson
5楼-- · 2020-02-05 22:30
有个初始化函数的,你搜索init_mempool

int_mempool(void_MALLOC_MEM_*pool,unsigned int size)
第一个参数表示起始地址,第二个参数表示可分配内存的总大小。
lcw_swust
6楼-- · 2020-02-05 23:09
UCGUI的内存管理不错

一周热门 更多>