gpt4 book ai didi

c++ - 可以在 C++ 代码而非 C 代码上完成 'easily' 的编译器优化示例

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:17 24 4
gpt4 key购买 nike

这个问题讨论了在 C 中不容易实现的排序函数的优化: Performance of qsort vs std::sort?

与 C++ 相比,是否有更多编译器优化的示例,这些优化在 C 中是不可能或至少难以实现的?

最佳答案

正如@sehe 在评论中提到的。它最重要的是抽象。换句话说,如果语言允许编码器更好地表达意图,那么它可以发出以更优化的方式实现该意图的代码。

一个简单的例子是std::fill。当然,对于基本类型,您可以使用 memset,但是,假设它是一个 32 位 unsigned long 数组。 std::fill 知道数组大小是 32 位的倍数。根据编译器的不同,它甚至可以假设数组也在 32 位边界上正确对齐。

所有这些组合可能允许编译器发出一次将值设置为 32 位的代码,而无需运行时检查以确保这样做是有效的。如果幸运的话,编译器会识别出这一点,并用代码的特别高效的架构特定版本替换它。

(实际上 gcc 和可能其他主流编译器实际上对任何可以被认为等同于 memset 的东西都这样做,包括 std::fill).

通常,memset 的实现方式是对这些类型的事物进行运行时检查,以便选择最佳代码路径。虽然这种差异可能可以忽略不计,但我们已经更好地表达了用特定值“填充”数组的意图,因此编译器能够做出稍微更好的选择。

其他更复杂的语言特征在使用意图表达方面做得很好,可以获得更大的 yield ,但这是最简单的例子。

需要明确的是,我的观点并不是说 std::fillmemset“更好”,相反,这是一个 C++ 如何允许 更好的例子向编译器表达意图,使其在编译期间拥有更多信息,从而使一些优化更容易实现。

关于c++ - 可以在 C++ 代码而非 C 代码上完成 'easily' 的编译器优化示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080025/

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