动态内存分配和释放

[复制链接]
4007|8
 楼主| jianwenwu 发表于 2008-3-20 09:48 | 显示全部楼层 |阅读模式
有谁帮我分析下这个程序,谢谢。<br />#define&nbsp;HEAPEND&nbsp;&nbsp;0x33ff0000<br />extern&nbsp;char&nbsp;Image$$RW$$Limit[];<br />void&nbsp;*mallocPt=Image$$RW$$Limit;<br />unsigned&nbsp;short&nbsp;*rxdata;<br />-------------------------------------------<br />rxdata&nbsp;=&nbsp;(unsigned&nbsp;short&nbsp;*)malloc(0x80000);<br />分配内存:<br />void&nbsp;*&nbsp;malloc(unsigned&nbsp;nbyte)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;*returnPt&nbsp;=&nbsp;mallocPt;<br />&nbsp;&nbsp;&nbsp;&nbsp;mallocPt&nbsp;=&nbsp;(int&nbsp;*)mallocPt+nbyte/4+((nbyte%4)&gt0);&nbsp;To&nbsp;align&nbsp;4byte<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(int)mallocPt&nbsp;&gt&nbsp;HEAPEND&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mallocPt&nbsp;=&nbsp;returnPt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;returnPt;<br />}<br />释放内存:<br />void&nbsp;free(void&nbsp;*pt)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;mallocPt&nbsp;=&nbsp;pt;<br />}<br /><br /><br />
dld2 发表于 2008-3-20 09:57 | 显示全部楼层

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

  
 楼主| jianwenwu 发表于 2008-3-20 10:21 | 显示全部楼层

看来d1d2的境界不低

能不能具体说说怎么没用么?谢谢。
dld2 发表于 2008-3-20 10:55 | 显示全部楼层

不敢谈境界

<br />它这个东西,要求释放的顺序必须等于分配的顺序,所以实际编程中没用。<br />比如分配了内存块A,再分配B,再释放A,再分配C(C的大小&gtA),就会把B冲掉。<br />内存堆的管理、动态分配和释放,是个很复杂的东西。有很多算法。<br />至少要把所有已分配的内存块的起始地址和长度都要记录下来。分配的时候要找空余的空间;释放的时候要合并到空余空间。<br />
 楼主| jianwenwu 发表于 2008-3-20 11:16 | 显示全部楼层

re

要求释放的顺序必须等于分配的顺序<br />是不是可以这样解释:假如内存大小=内存块A大小+内存块B大小。现在要分配C,而B可以释放掉,A还不想释放,但是按顺序就会把A释放。<br /><br />分配的时候要找空余的空间;<br />是不是说,内存堆的管理会把所有已分配的内存块的起始地址和长度都要记录下来,当然还有释放掉的内存信息,分配内存的时候根据算法,比较你要分配的内存大小和空余空间的大小,&nbsp;然后才决定分配。<br />而释放的时候要合并要空余空间还不太明白。
dld2 发表于 2008-3-20 11:23 | 显示全部楼层

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

  
 楼主| jianwenwu 发表于 2008-3-20 11:51 | 显示全部楼层

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

  
brandnew 发表于 2008-3-20 12:42 | 显示全部楼层

。。。

为什么不直接交给os去提供这种系统调用?
 楼主| jianwenwu 发表于 2008-3-20 12:58 | 显示全部楼层

暂时还没用OS。

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

20

帖子

0

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