C++编译器是否优化了乘以二的运算x*2到位移操作x?我愿意相信是的。 最佳答案 其实VS2008把这个优化成x+x:01391000pushecxintx=0;scanf("%d",&x);01391001leaeax,[esp]01391004pusheax01391005pushoffsetstring"%d"(13920F4h)0139100Amovdwordptr[esp+8],001391012calldwordptr[__imp__scanf(13920A4h)]inty=x*2;01391018movecx,dwor
我正在编写一个C++数字运算应用程序,其中瓶颈是一个必须计算double的函数:templateinlineTsqr(constT&x){returnx*x;}还有一个会计算的Basedist2(constPoint&p)const{returnsqr(x-p.x)+sqr(y-p.y)+sqr(z-p.z);}这些操作占用了80%的计算时间。我想知道您是否可以建议一些方法来使其更快,即使存在某种准确性损失谢谢 最佳答案 首先,确保dist2可以内联(从您的帖子中不清楚是否是这种情况),如有必要,将其定义在头文件中(通常您需要这样做
我正在编写一个C++数字运算应用程序,其中瓶颈是一个必须计算double的函数:templateinlineTsqr(constT&x){returnx*x;}还有一个会计算的Basedist2(constPoint&p)const{returnsqr(x-p.x)+sqr(y-p.y)+sqr(z-p.z);}这些操作占用了80%的计算时间。我想知道您是否可以建议一些方法来使其更快,即使存在某种准确性损失谢谢 最佳答案 首先,确保dist2可以内联(从您的帖子中不清楚是否是这种情况),如有必要,将其定义在头文件中(通常您需要这样做
对于没有被修改的局部变量,我经常使用const,像这样:constfloatheight=person.getHeight();我认为它可以使编译后的代码可能更快,允许编译器进行更多优化。还是我错了,编译器可以自己弄清楚局部变量永远不会被修改? 最佳答案 OramIwrong,andcompilerscanfigureoutbythemselvesthatthelocalvariableisnevermodified?大多数编译器都很聪明,可以自己解决这个问题。您应该使用const来确保const-correctness而不是微优化
对于没有被修改的局部变量,我经常使用const,像这样:constfloatheight=person.getHeight();我认为它可以使编译后的代码可能更快,允许编译器进行更多优化。还是我错了,编译器可以自己弄清楚局部变量永远不会被修改? 最佳答案 OramIwrong,andcompilerscanfigureoutbythemselvesthatthelocalvariableisnevermodified?大多数编译器都很聪明,可以自己解决这个问题。您应该使用const来确保const-correctness而不是微优化
对比简单的内存访问磁盘访问另一台计算机上的内存访问(在同一网络上)另一台计算机上的磁盘访问(在同一网络上)在Windows上的C++中。 最佳答案 相对时间(偏差不应超过100倍;-)缓存中的内存访问=1缓存中的函数调用/返回=2内存访问超出缓存=10..300磁盘访问=1000..1e8(摊销取决于传输的字节数)主要取决于寻道时间传输本身可以非常快至少涉及几千次操作,因为用户/系统阈值必须至少超过两次;一个I/O请求必须被调度,结果必须被写回;可能分配了缓冲区...网络调用=1000..1e9(摊销取决于传输的字节数)与磁盘i/o
对比简单的内存访问磁盘访问另一台计算机上的内存访问(在同一网络上)另一台计算机上的磁盘访问(在同一网络上)在Windows上的C++中。 最佳答案 相对时间(偏差不应超过100倍;-)缓存中的内存访问=1缓存中的函数调用/返回=2内存访问超出缓存=10..300磁盘访问=1000..1e8(摊销取决于传输的字节数)主要取决于寻道时间传输本身可以非常快至少涉及几千次操作,因为用户/系统阈值必须至少超过两次;一个I/O请求必须被调度,结果必须被写回;可能分配了缓冲区...网络调用=1000..1e9(摊销取决于传输的字节数)与磁盘i/o
我正在对一段代码进行快速性能测试voidConvertToFloat(conststd::vector&audioBlock,std::vector&out){constfloatrcpShortMax=1.0f/(float)SHRT_MAX;out.resize(audioBlock.size());for(size_ti=0;i我很高兴与最初的非常幼稚的实现相比加快了速度,处理65536个音频样本只需1毫秒多一点。不过只是为了好玩,我尝试了以下方法voidConvertToFloat(conststd::vector&audioBlock,std::vector&out){con
我正在对一段代码进行快速性能测试voidConvertToFloat(conststd::vector&audioBlock,std::vector&out){constfloatrcpShortMax=1.0f/(float)SHRT_MAX;out.resize(audioBlock.size());for(size_ti=0;i我很高兴与最初的非常幼稚的实现相比加快了速度,处理65536个音频样本只需1毫秒多一点。不过只是为了好玩,我尝试了以下方法voidConvertToFloat(conststd::vector&audioBlock,std::vector&out){con
我正在阅读有关分支错误预测可能成为应用程序性能的热门瓶颈的信息。正如我所看到的,人们经常展示揭示问题的汇编代码,并声明程序员通常可以预测一个分支最多可以去哪里,并避免分支错误预测。我的问题是:是否可以使用一些高级编程技术(即无汇编)避免分支错误预测?使用高级编程语言(我对C和C++最感兴趣)生成对分支友好的代码应该注意什么?欢迎使用代码示例和基准测试。 最佳答案 peopleoften...andstatethatprogrammersusuallycanpredictwhereabranchcouldgo(*)有经验的程序员经常提