打印

calloc()分配的空间在RAM

[复制链接]
2439|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myfaith|  楼主 | 2008-5-12 22:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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。

使用特权

评论回复
5
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);

使用特权

评论回复
6
wxj1952| | 2008-5-14 12:16 | 只看该作者

分析库函数?

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

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

使用特权

评论回复
7
myfaith|  楼主 | 2008-5-14 23:10 | 只看该作者

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

那么怎么动态的为新创建的用户分配空间保存用户名和密码呢?

使用特权

评论回复
8
赤铸| | 2008-5-14 23:26 | 只看该作者

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

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

468

帖子

0

粉丝