打印

动态内存分配和释放

[复制链接]
2548|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jianwenwu|  楼主 | 2008-3-20 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有谁帮我分析下这个程序,谢谢。
#define HEAPEND  0x33ff0000
extern char Image$$RW$$Limit[];
void *mallocPt=Image$$RW$$Limit;
unsigned short *rxdata;
-------------------------------------------
rxdata = (unsigned short *)malloc(0x80000);
分配内存:
void * malloc(unsigned nbyte) 
{
    void *returnPt = mallocPt;
    mallocPt = (int *)mallocPt+nbyte/4+((nbyte%4)>0); To align 4byte

    if( (int)mallocPt > HEAPEND )
    {
        mallocPt = returnPt;
        return NULL;
    }
    return returnPt;
}
释放内存:
void free(void *pt)
{
    mallocPt = pt;
}


相关帖子

沙发
dld2| | 2008-3-20 09:57 | 只看该作者

这个东西没用的。不必当真。

使用特权

评论回复
板凳
jianwenwu|  楼主 | 2008-3-20 10:21 | 只看该作者

看来d1d2的境界不低

能不能具体说说怎么没用么?谢谢。

使用特权

评论回复
地板
dld2| | 2008-3-20 10:55 | 只看该作者

不敢谈境界


它这个东西,要求释放的顺序必须等于分配的顺序,所以实际编程中没用。
比如分配了内存块A,再分配B,再释放A,再分配C(C的大小>A),就会把B冲掉。
内存堆的管理、动态分配和释放,是个很复杂的东西。有很多算法。
至少要把所有已分配的内存块的起始地址和长度都要记录下来。分配的时候要找空余的空间;释放的时候要合并到空余空间。

使用特权

评论回复
5
jianwenwu|  楼主 | 2008-3-20 11:16 | 只看该作者

re

要求释放的顺序必须等于分配的顺序
是不是可以这样解释:假如内存大小=内存块A大小+内存块B大小。现在要分配C,而B可以释放掉,A还不想释放,但是按顺序就会把A释放。

分配的时候要找空余的空间;
是不是说,内存堆的管理会把所有已分配的内存块的起始地址和长度都要记录下来,当然还有释放掉的内存信息,分配内存的时候根据算法,比较你要分配的内存大小和空余空间的大小, 然后才决定分配。
而释放的时候要合并要空余空间还不太明白。

使用特权

评论回复
6
dld2| | 2008-3-20 11:23 | 只看该作者

别人说的只是提示。自己理解吧。

使用特权

评论回复
7
jianwenwu|  楼主 | 2008-3-20 11:51 | 只看该作者

呵呵,说的也是,谢谢了。

使用特权

评论回复
8
brandnew| | 2008-3-20 12:42 | 只看该作者

。。。

为什么不直接交给os去提供这种系统调用?

使用特权

评论回复
9
jianwenwu|  楼主 | 2008-3-20 12:58 | 只看该作者

暂时还没用OS。

使用特权

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

本版积分规则

7

主题

20

帖子

0

粉丝