草庐IT

优化Spark

全部标签

c++ - 代码优化;切换与 if 的

我有一个问题,关于在一个经常被调用的函数中是使用“case”还是“ifs”。这是现在的以下内容,在“ifs”中;代码是不言自明的:intidentifyMsg(char*textbuff){if(!strcmp(textbuff,"text")){return1;}if(!strcmp(textbuff,"name")){return2;}if(!strcmp(textbuff,"list")){return3;}if(!strcmp(textbuff,"remv")){return4;}if(!strcmp(textbuff,"ipad")){return5;}if(!strcmp(

c++ - C++中进行良好性能优化的想法

好的,在过去三天里,我一直处于分析器结果的前面,该结果是通过自动化套件运行相当多的测试用例而产生的。这样做的目的是查看是否存在可以总体上提高性能的良好优化。在这种情况下,我将取得良好的成绩,具体如下:具有表现的潜力两者都是非常好的改进最后重要且可观察用户级别,例如>100%改善在表现不佳的地区。具有潜在的核心空间减少使用量减少50%以上在数据繁重的区域中。易于实现,且最少对代码的混淆和最小化副作用。即...的好处极大地实现优化超过成本。该应用程序是一个3d映射和建模程序包,在界面中具有大量图形,并在后端进行了几何处理。我已经在确保为大多数处理选择最佳算法方面做了很多工作,并且在此阶段,

c++ - 为什么即使在非常简单的情况下,volatile vars 也没有得到优化?

如果我编译代码intmain(){inti;i=1;i=2;}在带有发布和优化的VS中,反汇编看起来像:intmain(){inti;i=1;i=2;}010D1000xoreax,eax010D1002ret但是如果我写“volatile”这个词:intmain(){01261000pushecxvolatileinti;i=1;01261001movdwordptr[esp],1i=2;01261008movdwordptr[esp],2}0126100Fxoreax,eax01261011popecx01261012ret有谁知道为什么VS留下这段代码?它有任何副作用吗?它是程序

c++ - 为什么编译器不能优化这两条语句?

即使我在VisualC++中打开完全优化,编译器也无法优化main中的以下2条语句是否有任何原因?访问内存中的int变量有什么副作用吗?int_tmain(intargc,_TCHAR*argv[]){volatileintpleaseOptimizeMeOut=100;(pleaseOptimizeMeOut);return0;} 最佳答案 它无法优化它们,因为您已将变量声明为volatile。对volatile限定对象的加载和存储是C抽象机的“外部可见”效果的一部分。(顺便说一句,访问内存中的变量时有很多的副作用;它可以更新包括

c++ - 优化循环与代码复制

我的难题是如何最好地处理可以接受参数的长循环。考虑以下方法:voidHeavyLoop(byte*startingAddress,boolsecondaryModification){for(inti=0;i此方法将执行我想要的操作,但我在循环中使用了10000000个不必要的if。如果我像这样写同样的方法:voidHeavyLoop(byte*startingAddress,boolsecondaryModification){if(secondaryModification){for(inti=0;i我会得到相同的结果,尽管我的整个循环代码必须重复。如果我们讨论的是一个参数,这没什

c++ - 是否允许编译器优化堆内存分配?

考虑以下使用new的简单代码(我知道没有delete[],但它不属于这个问题):intmain(){int*mem=newint[100];return0;}是否允许编译器优化new调用?在我的研究中,g++(5.2.0)和VisualStudio2015不优化new调用,whileclang(3.0+)does.所有测试都是在启用完全优化的情况下进行的(-O3用于g++和clang,用于VisualStudio的Release模式)。new不是在幕后进行系统调用,使得编译器不可能(并且非法)对其进行优化吗?编辑:我现在已经从程序中排除了未定义的行为:#includeintmain()

c++ - 在 C++ 环境中优化回归测试

为了避免过多的测试,我想向质量保证(QA)团队提供提示,说明哪些功能必须在开发迭代后进行回归测试。您知道可以在C++和Subversion(以及VisualStudio)开发环境中执行此操作的工具吗?有关用例的详细信息:特征将由开发团队在入门方面点,通常是类(class)或类(class)方法。比如说,功能“excel文件import"由方法定义类的ImportExcelFile(...)文件导入器。在开发迭代期间,开发团队promise了一些一些方法的改变类。比如说,这些类(class)之一被方法间接使用导入Excel文件()在迭代结束时,所有提交由该工具分析,并且生成并交付报告给质

c++ - 是否有针对大量部分拷贝优化的 C++ STL 关联数据结构版本?

我有一棵大树,它会随着算法的进展而生长。每个节点都包含集合,我想它是作为平衡二叉搜索树实现的。每个节点的集合在该节点创建之后、用于创建该节点的子节点之前应保持固定。不过,我担心复制每一组都非常昂贵。相反,我更希望每个新创建的节点集都利用父节点集的所有适当部分。简而言之,我很高兴复制集合的O(logn)而不是O(n)。是否有提供这种部分复制优化的STL关联数据结构的变体?也许在升压?这样的数据结构在Haskell或OCaML中实现当然是微不足道的,但在C++中需要更多的努力。 最佳答案 我知道建议一种不同的语言通常不会产生什么效果,但

c++ - 从可执行文件中找出编译优化标志

这里我有一个可执行文件,不知道它的构建环境,假设使用的是gcc/g++。有没有办法找出编译期间使用的优化标志(如O0、O2等)?欢迎使用所有方法,无论是通过分析二进制文件还是通过gdb进行调试测试(如果我们假设-g标志在编译期间可用)。 最佳答案 如果幸运的话,命令行会出现在可执行文件本身中,具体取决于所使用的操作系统和文件格式。如果它是Elf文件,请尝试使用来自GNUbinutils的objdump转储内容 关于c++-从可执行文件中找出编译优化标志,我们在StackOverflow上

c++ - 如何优化间接基数排序? (又名如何优化不可预测的内存访问模式)

我用C++编写了一个间接基数排序算法(间接,我的意思是它返回项目的索引):#include#include#includetemplatevoidradix_ipass(It1begin,It1constend,It2consta,size_tconsti,std::vector>&buckets){size_tncleared=0;for(It1j=begin;j!=end;++j){size_tconstk=a[*j][i];while(k>=ncleared&&ncleared=buckets.size()){buckets.resize(k+1);ncleared=bucket