gpt4 book ai didi

c++ - 为了获得性能而避免多态性是否值得?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:34 25 4
gpt4 key购买 nike

为了提高性能而避免多态性是否值得?

我在Stroustrup的书上看到多态函数调用在25%以内比普通的函数调用更昂贵。这是否意味着我应该尽可能避免多态性?我是说我是不是应该一直想类似于:好的多态性可以解决这个问题,但它可能会一团糟up performance bla bla ... 或者考虑到现代 CPU 的强大功能,我什至不应该敢这么想?

最佳答案

I read in Stroustrup's book that polymorphic function call is within 25% more expensive than an ordinary function call. Does this mean I should avoid polymorphism whenever possible?

不,绝对不是!非虚拟调用非常快,因为调用本身通常是一条指令。虚拟调用需要额外的间接级别;这就是所谓的 25% 的来源,但这是“纯开销”,即在比较两个无参数函数的调用时测量的开销。一旦开始添加参数,尤其是那些需要复制的参数,两种开销之间的差距就会缩小:例如,将字符串按值传递给虚函数和非虚函数会使这种差距很难衡量。

此外,只有调用指令本身更昂贵,而不是函数。调用函数的开销只占函数总时间的一小部分。函数越长,调用开销所占的百分比就越小。

总的来说,您应该努力提高代码的可理解性。如果添加带有虚函数的子类可以更容易理解您的设计,那么无论如何您都应该使用子类化。运行代码的硬件每年都在变得更快,因此从长远来看,可读性会获胜。

关于c++ - 为了获得性能而避免多态性是否值得?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21152018/

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