- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
为了提高性能而避免多态性是否值得?
我在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/
我正在生成代码,其中我恰好将 n 个单词从一个内存位置复制到另一个非重叠内存位置。 n 是静态已知的。 目前,我发出大量加载指令,然后是大量存储指令,但我怀疑从 n 的某个值开始,调用 memcpy会
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
用例如下: 我有一张 map ,其中将插入一些键/值。 该程序将查询该 map ,但是在第一个查询之后,我可以保证该 map 将完全不会被修改。 因为查询的结果完全是输入的函数,所以在查询方法上放置属
Helo 伙计们,我尝试使用 Refs 并在他的内部提供 this.setState 但它给出: Maximum update depth exceeded. This can happen when
在检查事件时,使用带有 switch 或 if 的代码块是很常见的事情。如果变得简单,它可以是干净的代码,但似乎仍然有比需要更多的行,并且可以使用 lambda 进行简化。 用 if 阻止: if(a
Amazon 最近宣布在其 RDS 产品线中支持 Oracle: http://aws.amazon.com/rds/oracle/ 我想知道是否有人使用过它,或者是否有令人信服的理由将我的数据从 M
我是一名优秀的程序员,十分优秀!