calloc()分配的空间在RAM

[复制链接]
3194|7
 楼主| myfaith 发表于 2008-5-12 22:57 | 显示全部楼层 |阅读模式
AT89S52单片机,我用calloc()分配空间,
uchar *p;
p=(uchar data *)calloc(17,sizeof(uchar));
结果发现编译器有数据分配的空间在XRAM
怎么用这个函数在内部RAM中分配?

wxj1952 发表于 2008-5-14 09:08 | 显示全部楼层

概念

使用calloc()申请内存之前必须要在内存中先开一个pool,所申请的空间只能在这个pool范围里。C51中 void init_mempool(void xdata *p,unsigned int size); pool 区域已经说明为xdata ,所以calloc 从xdata区域申请。

   除非有方法把mempool()函数形参中xdata修饰符能修改为data 。
农民讲习所 发表于 2008-5-14 09:17 | 显示全部楼层

自己写

51中怎么会用到动态分配啊?除非是俺那个用法,只在初始化才用的。
可以用数组代替啊。
dld2 发表于 2008-5-14 10:56 | 显示全部楼层

这个也晕

慎用少用动态分配内存,何况是51。
wxj1952 发表于 2008-5-14 12:07 | 显示全部楼层

且看C51中的动态存储函数.

有库就是让人用的。只要你开好mempool(),放心地用。要看看别人怎么用的?推荐一本书,《单片机C程序设计及应用实例》北邮版P155

STDLIB.H
...........

#define _MALLOC_MEM_   xdata

extern int  init_mempool (void _MALLOC_MEM_ *p, unsigned int size);
extern void _MALLOC_MEM_ *malloc  (unsigned int size);
extern void free (void _MALLOC_MEM_ *p);
extern void _MALLOC_MEM_ *realloc (void _MALLOC_MEM_ *p, unsigned int size);
extern void _MALLOC_MEM_ *calloc  (unsigned int size, unsigned int len);
wxj1952 发表于 2008-5-14 12:16 | 显示全部楼层

分析库函数?

把 #define _MALLOC_MEM_   xdata 改为
#define _MALLOC_MEM_   data  ?

恐怕不行。因为data 区有堆栈问题。谁知道呢。有功夫把函数调出来分析分析。

 楼主| myfaith 发表于 2008-5-14 23:10 | 显示全部楼层

程序中,高级用户动态的创建和删除低级用户,

那么怎么动态的为新创建的用户分配空间保存用户名和密码呢?
赤铸 发表于 2008-5-14 23:26 | 显示全部楼层

最多200个字节,还动态分配

动态管理本身也会消耗内存,内存申请释放还会产生碎片(空洞)……
这种场合,需要管理的内存对象大小相同,自己管理更有效,可保证不会产生空洞
动态维护好一个序号或“句柄”的数组,其它信息存放在固定的空间(一个定义好的结构数组)
删除其实不用干什么,只要把对应数组元素标记为“可用”,即可被新记录覆盖
分配就是新增一个句柄
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

468

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部