taocp,顺序分配问题

时间:2009-07-21 03:56:18

标签: memory-management taocp

我在使用tacop 2.2.2顺序分配时遇到了一些问题,重新打包内存部分在第247页。

主题是有n个堆栈共享公共区域位置L0< L< LX, 最初我们设置BASE [j] = TOP [j] = L0为1< = j< = n

目标是在插入或删除元素时发生溢出 堆叠我,如何重新打包内存。 (通过带走一些东西为堆栈腾出空间 尚未填写的表格。

A)。找到i <的最小k。 k&lt; n和TOP [k]&lt; BASE [k + 1],如果有这样的k 存在。将事情提升一个档次,    设置内容(L + 1) - &gt;内容(L),TOP [k]&gt; = L&gt; BASE [I + 1] 最后,    设置BASE [j] - &gt; BASE [j] + 1,TOP [j] - &gt; TOP [j] + 1,对于i&lt; j&lt; ķ

这是我的问题:

他们如何找到尚未填充的堆栈?堆栈k?为什么选择最小的k?

1 个答案:

答案 0 :(得分:2)

要查找尚未填充的堆栈,使用的基本思路是:

  

堆栈k未满;&lt; ==&gt; TOP[k] < BASE[k+1]

算法第一步中的循环从ki+1运行n,以找到满足此条件的第一个k

另请注意,通过设置nBASE[n] = TOP[n] = L0,最初所有空间都会被赋予最后一个BASE[n+1]=LInfty堆栈。因此,除非填写了所有“更高”的堆栈,否则我们会找到k

你的第二个问题(为什么选择最小的k?)更容易回答:第247页的算法只是一种重新打包的方式简单

  

重新包装的几种方法表明了自己; ...   我们将从最简单的方法开始,   然后会考虑一些替代方案。

后来,Knuth描述了一种重新包装方法,该方法考虑了早期的重新包装,使得该过程具有一定的适应性。