第七章运行时刻环境.pptVIP

  • 1
  • 0
  • 约6.39千字
  • 约 54页
  • 2017-02-09 发布于湖南
  • 举报
第七章运行时刻环境

例子 相邻的存储块A、B、C 当回收B时,通过对free/used位的查询,可以知道B左边的A是空闲的,而C不空闲。 同时还可以知道A、B合并为长度为300的块。 修改双重链表,把A替换为A、B接合后的空闲块 注意:双重链表中一个结点的前驱并不一定是它邻近的块 处理手工存储管理 两大问题: 内存泄露:未能删除不可能再被引用的数据 悬空指针引用:引用已被删除的数据 其他问题 空指针访问/数组越界访问 解决方法: 自动存储管理 正确的编程模式 正确的编程模式(1) 对象所有者(Object ownership) 每个对象总是有且只有一个所有者(指向此对象的指针);只有通过Owner才能够删除这个对象; 当Owner消亡时,这个对象要么也被删除,要么已经被传递给另一个owner。 语句v=new ClassA;创建的对象的所有者为v; 即将对v进行赋值的时刻(v的值即将消亡) 要么v已经不是它所指对象的所有者;比如g=v可以把v的ownership传递给g 要么需要在返回/赋值之前,执行delete v操作; 编程时需要了解各个指针在不同时刻是否owner。 防止内存泄漏,避免多次删除对象。不能解决悬空指针问题。 正确的编程模式(2) 引用计数 每个动态分配的对象附上一个计数:记录有多少个指针指向这个对象; 在赋值/返回/参数传递时维护引用计数的一致性; 在计数变成0之时删除这个对象;

文档评论(0)

1亿VIP精品文档

相关文档