premature-optimization
全部标签 我正在使用STLmap数据结构,此时我的代码首先调用find():如果该键以前不在map中,它会调用insert()它,否则它什么也不做。map::iteratorit;it=my_map.find(foo_obj);//1stlookupif(it==my_map.end()){my_map[foo_obj]="somevalue";//2ndlookup}else{//okdonothing.}我想知道是否有比这更好的方法,因为据我所知,在这种情况下,当我想插入一个还不存在的键时,我会在map数据结构中执行2次查找:一次对于find(),insert()中的一个(对应于operat
我正在使用STLmap数据结构,此时我的代码首先调用find():如果该键以前不在map中,它会调用insert()它,否则它什么也不做。map::iteratorit;it=my_map.find(foo_obj);//1stlookupif(it==my_map.end()){my_map[foo_obj]="somevalue";//2ndlookup}else{//okdonothing.}我想知道是否有比这更好的方法,因为据我所知,在这种情况下,当我想插入一个还不存在的键时,我会在map数据结构中执行2次查找:一次对于find(),insert()中的一个(对应于operat
我正在使用gdb调试C++程序。我有这个代码:intx=floor(sqrt(3));我想查看x的值。但是,gdb声称x是“”。如何查看x的值?我应该更改我的编译器标志吗? 最佳答案 在高优化级别上,编译器可以消除中间值,正如您在此处看到的。有多种选择:您可以降低优化级别,使调试器更容易跟踪事物。-O0肯定可以工作(但会慢很多),-O1也可以正常工作。您可以添加一些显式打印语句来记录输出值。您通常也可以强制编译器通过将其设置为volatile来保留此特定值(但请记住在完成后将其取消设置为volatile!)。但是请注意,由于控制流在
我正在使用gdb调试C++程序。我有这个代码:intx=floor(sqrt(3));我想查看x的值。但是,gdb声称x是“”。如何查看x的值?我应该更改我的编译器标志吗? 最佳答案 在高优化级别上,编译器可以消除中间值,正如您在此处看到的。有多种选择:您可以降低优化级别,使调试器更容易跟踪事物。-O0肯定可以工作(但会慢很多),-O1也可以正常工作。您可以添加一些显式打印语句来记录输出值。您通常也可以强制编译器通过将其设置为volatile来保留此特定值(但请记住在完成后将其取消设置为volatile!)。但是请注意,由于控制流在
当我启用-fprofile-generate时GCC会收集哪些信息,哪些优化实际上使用了收集的信息(设置-fprofile-use标志时)?我需要在这里引用。我已经搜索了一段时间,但没有找到任何记录。有关链接时间优化(LTO)的信息将是一个加分项!=D 最佳答案 -fprofile-generate启用-fprofile-arcs、-fprofile-values和-fvpt。-fprofile-use启用-fbranch-probabilities、-fvpt、-funroll-loops、-fpeel-loops和-ftrace
当我启用-fprofile-generate时GCC会收集哪些信息,哪些优化实际上使用了收集的信息(设置-fprofile-use标志时)?我需要在这里引用。我已经搜索了一段时间,但没有找到任何记录。有关链接时间优化(LTO)的信息将是一个加分项!=D 最佳答案 -fprofile-generate启用-fprofile-arcs、-fprofile-values和-fvpt。-fprofile-use启用-fbranch-probabilities、-fvpt、-funroll-loops、-fpeel-loops和-ftrace
以一种或另一种方式有任何性能优势吗?它是编译器/虚拟机特定的吗?我正在使用热点。 最佳答案 首先:您不应该根据性能来选择静态还是非静态。第二:在实践中,它不会有任何区别。Hotspot可能会选择以使一种方法的静态调用更快、另一种方法的非静态调用更快的方式进行优化。第三:围绕静态与非静态的许多神话要么基于非常古老的JVM(它没有做任何接近Hotspot所做的优化),或者一些内存中的关于C++的琐事(其中动态调用使用比静态调用多一个内存访问)。 关于java-Java静态调用比非静态调用更贵
以一种或另一种方式有任何性能优势吗?它是编译器/虚拟机特定的吗?我正在使用热点。 最佳答案 首先:您不应该根据性能来选择静态还是非静态。第二:在实践中,它不会有任何区别。Hotspot可能会选择以使一种方法的静态调用更快、另一种方法的非静态调用更快的方式进行优化。第三:围绕静态与非静态的许多神话要么基于非常古老的JVM(它没有做任何接近Hotspot所做的优化),或者一些内存中的关于C++的琐事(其中动态调用使用比静态调用多一个内存访问)。 关于java-Java静态调用比非静态调用更贵
java中有两种类型的if语句-经典:if{}else{}和简写:exp?值1:值2。一个比另一个快还是一样?声明:intx;if(expression){x=1;}else{x=2;}三元运算符:intx=(expression)?1:2; 最佳答案 那里只有一种“if”语句。另一种是条件表达式。至于哪个性能更好:它们可以编译成相同的字节码,我希望它们的行为相同-或者非常接近,以至于您绝对不想在性能方面选择一个。有时if语句更易读,有时条件运算符更易读。特别是,当两个操作数简单且无副作用时,我建议使用条件运算符,而如果两个分支的主
java中有两种类型的if语句-经典:if{}else{}和简写:exp?值1:值2。一个比另一个快还是一样?声明:intx;if(expression){x=1;}else{x=2;}三元运算符:intx=(expression)?1:2; 最佳答案 那里只有一种“if”语句。另一种是条件表达式。至于哪个性能更好:它们可以编译成相同的字节码,我希望它们的行为相同-或者非常接近,以至于您绝对不想在性能方面选择一个。有时if语句更易读,有时条件运算符更易读。特别是,当两个操作数简单且无副作用时,我建议使用条件运算符,而如果两个分支的主