| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1137 人关注过本帖
标题:大家帮我解释一下c的释放内存的原理
只看楼主 加入收藏
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
 问题点数:0 回复次数:8 
大家帮我解释一下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
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
代码后面的那段描述好像并没有说要释放,只说如果是栈空间就把指针放在链表的表头,
倒是说了如果该区域是malloc出来的,就释放并退出
没有上下文,无法进一步判断

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-04-19 00:43
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
glee_1218
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-15
收藏
得分:0 
c的内存释放原理
我是这样认为的:
局部变量(除了静态变量)在被调函数调用结束后占用的内存空间都会被自动释放,因为他们是位于堆栈中的,如果不相信的话,写一段简单的c程序然后反汇编看看汇编代码就可以知道了。
全局变量,静态变量,还有用malloc的指针等开辟在堆中,这些东西除非程序执行完结束,否则是不会被自动释放的。
还有被赋初值的局部变量,数组等,这个我没有考虑过,不过觉得也是在堆中,但是在堆栈中有一个空间存放他们在堆中的地址。
有时候光看书不能明白的,所以最好自己动手写代码然后把他们反汇编,看伪汇编代码容易明白。
2008-04-19 20:34
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
得分:0 
楼上说的不怎么懂啊
能不能给段代码给我啊 汇编我也学过一点点

2008-04-21 10:41
天才小明
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-4-14
收藏
得分:0 
楼主刚学连表?支持下
2008-04-21 15:42
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:353
专家分:222
注 册:2006-4-11
收藏
得分:0 
malloc的实现在154页....应该可以解释你的问题

[[it] 本帖最后由 hao0716 于 2008-4-21 15:54 编辑 [/it]]

C程序设计语言.pdf (885.16 KB)

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

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



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

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