当前位置:  开发笔记 > 编程语言 > 正文

由于使用严格的数据构造函数导致性能下降的示例

如何解决《由于使用严格的数据构造函数导致性能下降的示例》经验,为你挑选了1个好方法。

我正在阅读有关严格数据构造函数的内容.链接的维基文章指出,

"严格注释会使性能变差[因为]严格注释会强制编译器确保在构建构造函数之前完全评估该字段,如果事实证明该字段已经被评估过,那么这只是浪费的工作".

我不明白为什么如果该字段已经被评估它是浪费的工作,因为无论如何它都需要应用构造函数的值.

是否有一个例子说明了这个问题或其他因严格性而导致的效率损失?



1> Joachim Brei..:

强制一个值,即使它已被评估,但成本很小但却存在.

如果你有一个可能已经或可能没有被评估的东西的指针(一个thunk或一个值),并且你将它包装在一个惰性数据构造函数中,你只需将该地址复制到它在内存中的位置.那很快.

如果您有这样的指针并且想要将其存储在严格的构造函数中,则必须首先对其进行求值.这需要检查指针的最低位以寻找可能的标签(表示评估的技巧).如果没有标签,你实际上跳转到这个指针进入 thunk.在执行此操作之前,必须将返回帧推送到堆栈,以便最终返回执行流程.然后thunk自我评估,将结果放入寄存器并跳转到返回地址.然后你可以把这个结果放到内存中.

因此,即使您指向的内容已经过评估,您仍然需要进行标记检查.而且我相信在某些情况下,评估的东西没有标签(它是可选的),因此所有其他工作可能仍然会发生 - 什么都不做.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有