std::vectorC(4);for(inti=0;i比多快for(inti=0;iC(4);C[0]=1.0;C[1]=1.0;C[2]=1.0;C[3]=1.0;}我意识到发生这种情况是因为std::vector在循环中被重复创建和实例化,但我的印象是这将被优化掉。p>尽可能将局部变量保持在循环中是否完全是错误的?我的印象(也许是错误的)认为这将为编译器提供优化机会。或者这可能只适用于POD类型,而不适用于std::vector。编辑:我在WindowsXP上使用完全优化(/Ox)的VC++2005(Release模式) 最佳答案
我的任务是创建优化的C++源代码并将其交给friend编译。这意味着,我不控制最终的编译,我只是编写C++程序的源代码。我知道,a可以在编译期间使用GCC的-O1(和-O2等)选项进行优化。但是我怎样才能得到这个优化的源代码而不是编译后的程序呢?我无法配置我friend的编译器的参数,这就是为什么我需要在我这边制作一个好的源代码。 最佳答案 GCC执行的优化是低级别的,这意味着您不会再次获得C++代码,但最好的情况是汇编代码。但是您将无法转换它或其他东西。总而言之:在代码级别而非对象级别优化源代码。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我想在速度和准确性方面写出好的陈述。如果我没有记错这一行:b=(a+1)*a生成的程序比这更好:b=(a^2+a)。这只是一个示例,可能有误,但现在无关紧要,问题是:我在哪里可以找到科学计算良好实践的纲要?
有时在查看优化代码时,我发现仅在循环范围内使用的参数将其声明移到了循环之外。像这样:Aarr[BIG_NUMBER];//....//for(inti=0;i!=BIG_NUMBER;++i){Bb=arr[i].getB();//...dosomeworkwithb.}变成这样:Aarr[BIG_NUMBER];//....//Bb;for(inti=0;i!=BIG_NUMBER;++i){b=arr[i].getB();//...dosomeworkwithb.}大概的原因是我们在不断地重新声明b上节省了开支。但这样做合理吗?根据B是原始类型还是类,答案会有所不同吗?我本以为,虽
在浏览开源代码(来自OpenCV)时,我在一个方法中发现了以下类型的代码://copyclassmembertolocalvariableforoptimizationintfoo=_foo;//where_fooisaclassmemberfor(...)//aheavyloopthatmakesuseoffoo来自anotherquestion所以我得出结论,关于是否这实际上需要完成或由编译器自动完成的答案可能取决于编译器/设置。我的问题是,如果_foo是一个static类成员,是否会有任何不同?这种手动优化是否还有意义,或者访问静态类成员并不比访问局部变量更“昂贵”?附言-我问是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。我今天发现了一个关于gcc的有趣测验http://ridiculousfish.com/blog/posts/will-it-optimize.html这段代码怎么来的intfactorial(intx){if(x>1)returnx*factorial(x-1);elsereturn1;}可以被编译器翻译成intfactorial(intx){intresult=1;while(x>1)resu
考虑以下代码:#include#include#includeintmain(){constunsignedintsize=1000;std::vectorv(size);unsignedintcst=size/2;std::iota(v.begin(),v.end(),0);std::random_shuffle(v.begin(),v.end());std::cout此代码用值填充vector,对其进行打乱,然后搜索指定值的索引(这只是说明我的问题的示例)。此值cst可以通过引用或lambda函数中的值来捕获。我的问题:这两个版本之间的性能是否存在差异,或者编译器会以相同的方式对其
我刚刚了解到除法运算符的舍入行为在C++11之前没有定义。解决方案是使用std::div。(Safelyroundtonextsmallermultiple)我的程序总是假定/只会截断小数部分。作为快速修复,我想包含一个断言,这样如果有人在具有不同舍入行为的平台上进行编译,我至少会得到一个错误。assert(3/2==1)或static_assert(3/2==1)会完成这项工作吗?或者这些常量是否会被编译器内部的算法优化掉,这可能与机器实际做的不同? 最佳答案 “我刚刚了解到除法运算符的舍入行为在C++11之前没有定义”。如果两个
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:InlinefunctionsinC++现代编译器比程序员更擅长决定什么应该内联,什么不应该。就像register一样,内联函数不应该只是编译器的工作,并且被认为是过早的优化吗?
我一直在处理的一个DLL最近变大了很多。是否有任何工具可以告诉我对此负责的是什么?例如,它是实例化次数过多的模板,还是第3方库,或者是boost?我正在寻找一种关注大小而不是性能的分析器。 最佳答案 您是在谈论DLL的字节大小吗?尝试使用dumpbin实用程序。这可以向您显示DLL中的内容。/ARCHIVEMEMBERS应该向您展示各个对象模块。http://support.microsoft.com/kb/177429 关于c++-如何找出我的DLL增长如此之多的原因,我们在Stack