| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1135 人关注过本帖
标题:大家帮我解释一下c的释放内存的原理
取消只看楼主 加入收藏
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
 问题点数:0 回复次数:4 
大家帮我解释一下c的释放内存的原理
有下面的一段代码
void my_free(void *ptr)
{
  if(ptr>=btm_of_heap)
   {
     if(ptr<top_of_heap)
       (
         ptr->link=heap;
         heap=ptr;
         return;
        }
      else
      if(free(ptr))
       { return;}
    }
puts("\nAttemp to free unallocated block!\n\7");
exit(1);
}
该函数通过传入的要释放的内存区域的首地址来判断这快内存是不是从heap分配
出去的.如果是,则btm_of_heap<=ptr<top_of_heap应放把它放到链表表头,其操作是
ptr->link=heap;否则,说明这个内存是由malloc分配的,执行else中的free().
问题:两个红色的部分不懂
放到表头就能释放了吗
所有的堆,不都是malloc分配的吗
难道有两个链表控制内存的分配.回收管理问题吗
不怎么理解
望解释
搜索更多相关主题的帖子: 内存 原理 释放 解释 
2008-04-19 00:18
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
得分:0 
上面还有个函数,该函数用来初始化分配内存.在这个函数中,分配了50个大小是80B的
内存块,用一个一维表来维护.heap存放的是堆的头指针,它随着快的分配和回收不断变化,通过top_of_heap和btm_of_heap静态变量,可以知道哪部分内存应该由内存分配程序来维护.当一快内存要释放的时候,如果他的地址在top_of_heap和btm_of_heap之间,就说明这快内存是由这个链表维护的

我看了半天也不知道,内存快放表头,就可以释放内存?

2008-04-19 10:51
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
得分:0 
各位 帮帮忙啊

2008-04-19 18:01
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
得分:0 
楼上说的不怎么懂啊
能不能给段代码给我啊 汇编我也学过一点点

2008-04-21 10:41
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
得分:0 
回复 7# 的帖子
早学过了 在看操作系统 想知道释放内存的原理

2008-04-22 23:17
快速回复:大家帮我解释一下c的释放内存的原理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019001 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved