![]() |
1
61
这是一个很好的假设。但是,优化器可能会受到限制,无法在存在
例如,如果将int转换为指针,优化器可能不知道该指针可能指向什么。因此,它可能必须假设通过该指针的写操作可以更改任何变量。这击败了非常常见的优化,例如将变量存储在寄存器中。 |
![]() |
2
6
这是正确的。在新的宽度上执行指令,除了性能上的任何增益/损失之外,没有其他成本(我可能会补充一点),这只是少数情况下的一个问题。在我听说过的每个平台上,指针之间的转换都是零成本的,而且性能没有任何变化。 |
![]() |
3
5
C++中的C样式强制将首先尝试静态分析,如果不能执行静态映射,则只执行重新解释。在多重继承的情况下(或当将接口转换为具体类型时),静态类型转换可能会更改指针的值,此偏移量计算可能会涉及额外的机器指令。这最多只能是一条机器指令,所以真的很小。 |
![]() |
4
2
|
![]() |
5
2
你是对的,但是想想看:重新解释一下你的角色可能意味着一个糟糕的设计或者你在做一些非常低级的事情。 相反,动态强制转换将花费您一些东西,因为它必须在运行时查找查找表。 |
![]() |
6
1
先正确,再担心效率。 |
![]() |
7
0
在将有符号字符转换为无符号字符之前和之后,我都在查看我的汇编代码。指令增加了3到4条指令。
我强制转换为unsigned char以使编译器使用SHL指令,而不是SAR指令,这样新移位的位将是zer0s,而不是var I signed bit value。 编译器仍然并且似乎总是使用SAR指令。但是重新解释铸造使编译器添加了更多的指令。还有3到4条指令! 我很担心为什么我的unicode函数将UTF8转换成UTF16字符串的速度几乎比Win32 MultiByteToWideChar()慢3倍。现在我担心铸造是主要因素之一。 这是讽刺,因为我们使用的速度重新解释铸造。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |