gpt4 book ai didi

c++ - 任何不将大型开关 block 转换为二叉树的编译器?

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:08 26 4
gpt4 key购买 nike

我读到现代 C++ 编译器将大型 switch block 转换为二叉树以便在运行时更快地查找,这是否适用于所有现代 C++ 编译器?我主要使用英特尔 C++ 编译器和 G++。

最佳答案

如果您的 case 值彼此接近,最有效的方法是跳转表,这通常是所有编译器的目标。如果值是稀疏的,那么编译器通常会选择“binary-if-tree”。

最佳解决方案:别想了。假设 switch 相当快。其他一切闻起来都像是过早的优化。如果你真的遇到一个switch是你程序的瓶颈,那只能看生成的目标代码才知道生成了什么。

如果您在每种情况下只分配一个变量,编译器甚至可能生成完全不同的东西,例如条件移动。因此,如果不查看生成的程序集,您永远无法知道。

如果你有很多稀疏值,那么使用哈希表可能比 switch 更快,因为与 相比它是 O(1) “二进制如果树”的 O(log n)

关于c++ - 任何不将大型开关 block 转换为二叉树的编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24139063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com