降低管理开销的好方法--差分链表

 

   编程中链表不可或缺,但链表也是空间耗费的大户,因此对于给链表"减负"很必要。近段时间看linux的时间管理,发现对于存储在某方面具有连续性联系的各项(如在时间上存在先后关系),差分链表很有用。以差分时间链为例:

   在差分时间链中,每个表项所包含的计时值并非当前时刻到表项激活时刻的绝对计数,而是该表项和先于它的所有表项的计数值之和。这些表达不太清楚,下面有些图做说明。

 

在当前时刻,A对象需要等待3个时间单位就应被激活,B对象需要等待5(3+2)个时间单位就应被激活,C对象需要等待10(3+2+5)个时间单位就应被激活。
在当前时刻,如果有一个等待9个时间单位的对象E需要插入到队列中,由于9-3-2=4,而9-3-2-5=-1,因此E对象需要插入到差分链中介于对象B和对象C之间的位置。

   对于差分时间链,系统每接收到一个tick(时钟中断),就修订链首对象的时间值。如果链表对象的时间单位为tick,则每发生一个tick,链首对象的时间值就减1,当减到0时,链首对象就被激活,并从差分时间链中取下来,下一个对象又成为链首对象。

  这样对于节点的存储空间来说,用short就足够了,不然就要使用long了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值