|
|
1
52
首先,您需要在很多次迭代中测量性能,因为您的结果将由计时器的分辨率控制。尝试100万以上,以建立一个具有代表性的图片。同样,除非你将这个结果与某件事进行比较,即做相同的事,但不进行动态铸造,否则这个结果是没有意义的。 其次,您需要通过优化同一指针上的多个动态强制转换来确保编译器不会给出错误的结果(因此使用循环,但每次使用不同的输入指针)。
|
|
|
2
30
如果不比较等效功能,性能就毫无意义。 大多数人说,如果不与同等的行为相比,动态演算是慢的。把他们叫出来。换一种说法:
primes to improve dynamic_cast ,例如。不幸的是,控制编译器如何实现强制转换是不寻常的,但是如果性能对您真的很重要,那么您可以控制您使用的编译器。 不使用 动态铸造遗嘱 总是 |
|
|
3
21
以下是一些基准:
根据他们的说法,dynamic_cast比reinterpret_cast慢5-30倍,最好的替代方案的性能几乎与reinterpret_cast相同。 我将引用第一篇文章的结论:
|
|
|
4
6
很抱歉这么说,但是你的测试对于判断演员的表演是否慢是毫无用处的。微秒的分辨率远远不够好。我们说的是一种操作,即使在最坏的情况下,在一台典型的个人电脑上也不应该超过,比如说,100个时钟周期,或者少于50纳秒。 毫无疑问,动态强制转换将比静态强制转换或重新解释强制转换慢,因为在程序集级别,后两个强制转换相当于一个赋值(非常快,顺序是1个时钟周期),而动态强制转换需要代码去检查对象以确定其真实类型。 我不能马上说它有多慢,这可能会因编译器而异,我需要看到为那一行代码生成的汇编代码。但是,就像我说的,每次调用50纳秒是期望合理值的上限。 |
|
|
5
3
你的里程数可能会有所不同,以低估情况。
dynamic_cast的性能在很大程度上取决于您在做什么,并且可以取决于类的名称是什么(以及比较相对于
我一直在研究它在clang/g++中是如何工作的。假设你是
所以,是的,当
类型比较需要多长时间?它做到了,在clang/g++:
需要strcmp,因为可能有两个不同的
当然,由于操作作为一个整体正在遍历一堆表示类型层次结构的链接数据结构,因此时间将取决于这些内容在缓存中是否新鲜。因此,重复执行同一个cast可能会显示一个平均时间,这不一定代表该cast的典型性能。 |