Following my previous question关于超长函数背后的基本原理,我想提出一个关于 piece of code 的具体问题。我正在为我的研究而学习。它是来自 Linux 内核的函数,它相当长(412 行)且复杂(MCC index 的 133)。基本上,它是一个长而嵌套的 switch 语句

坦率地说,我想不出有什么办法可以改善这个烂摊子。调度表看起来既庞大又低效,任何子程序调用都需要难以想象的参数数量才能覆盖足够大的代码段。

你有没有想出什么方法可以在不降低效率的情况下以更具可读性的方式重写这个函数?如果不是,代码对您来说是否可读?

不用说,出现在我的研究中的任何答案都将得到充分的信任 - 无论是在此处还是在提交的论文中。

Link to the function in an online source browser

请您参考如下方法:

我不认为这个函数是一团糟。我以前不得不写得这么乱。

该函数是将来自微处理器制造商的表格转换为代码。这是非常低级的东西,为特定的中断或错误原因复制适当的硬件寄存器。在这种代码中,您通常不能接触硬件尚未填充的寄存器——这会导致总线错误。这可以防止使用更通用的代码(例如复制所有寄存器)。

我确实看到了一些代码重复。但是,在这个级别(在中断级别运行),速度更为重要。除非我知道提取的方法将被内联,否则我不会在公共(public)代码上使用提取方法。


顺便说一句,当你在那里(内核)时,一定要捕获这段代码的更改历史。我怀疑您会发现这里没有太多变化,因为它与硬件有关。这种代码随时间变化的性质与大多数用户模式代码所经历的变化的性质完全不同。

这是一种会发生变化的事情,例如,当实现新的整合 IO 芯片时。在那种情况下,更改很可能是复制和粘贴并更改新副本,而不是修改现有代码以适应更改后的寄存器。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!