草庐IT

OPTIMIZATION

全部标签

c++ - 在 C++ 中,i>-1 或 i>=0 哪个更好

这个问题在这里已经有了答案:Is(16个答案)x>-1vsx>=0,isthereaperformancedifference(11个答案)关闭7年前。这可能是一个愚蠢的问题,但这种优化有时会提高应用程序的性能。在这里,我专门针对C++提出要求,因为C++编译代码的方式与C#或Java有很大不同。问题是如果变量i是int,哪个表现更好。i>-1i>=0我正在寻找所需的内存块或寄存器以及这两种情况所需的CPU周期方面的性能。提前致谢。

c++ - 为已知的更常见路径优化分支

请考虑以下代码:voiderror_handling();boolmethod_impl();boolmethod(){constboolres=method_impl();if(res==false){error_handling();returnfalse;}returntrue;}我知道method_impl()会在99.999%(是的,小数点后三位)的情况下返回true,但我的编译器不会。method()在时间消耗方面是部分关键的。我是否应该重写method()(并降低其可读性)以确保仅当method_impl()返回false时才会发生跳转?如果是,怎么做?我应该让编译器为我

c++ - 编译器生成昂贵的MOVZX指令

我的探查器已将以下功能分析确定为热点。typedefunsignedshortushort;boolisInteriorTo(conststd::vector&point,constushort*coord,constushortdim){for(unsignedi=0;i=coord[i])returnfalse;}returntrue;}特别是,一个汇编指令MOVZX(MovewithZero-Extend)负责运行时的大部分工作。if语句被编译成movrcx,QWORDPTR[rdi]lear8d,[rax+1]addrsi,2movzxr9d,WORDPTR[rsi-2]mov

c++ - 如果在这些写入之后没有代码,为什么 C++ 编译器只会消除无用的写入?

我正在检查VisualC++10的优化功能并发现了一件相当奇怪的事情。这里的所有代码都是用/O2编译的。在下面的代码中:int_tmain(intargc,_TCHAR*argv[]){charbuffer[1024]={};MessageBoxA(0,buffer,buffer,0);memset(buffer,0,sizeof(buffer));return0;}在return之前对memset()的调用从机器代码中消除(我检查了反汇编)。这是完全合理的-如果之后没有从buffer读取,那么memset()就没用了,如果开发人员真的想覆盖缓冲区,可以使用SecureZeroMemo

c++ - 我的 C++ 编译器会优化我的代码吗?

在使用现代C++编译器(包括MSVC、GCC、ICC)时,我怎么能说它是否有:并行代码向量化循环(或使用其他特定处理器指令)展开循环检测到尾递归执行RVO(返回值优化)或以其他方式优化没有深入研究编译器生成的汇编代码? 最佳答案 您可以真正判断的唯一方法是检查汇编器输出(您似乎已经打折)。除此之外,您可以阅读doco以查看每个编译器级别提供的优化类型。但是,老实说,如果您不相信编译器的优化级别正在完成这项工作,您可能不会相信doco:-)我会亲自查看汇编程序,这是您真正确定的唯一方法。

c++ - 声明一个空的析构函数可以防止编译器调用 memmove() 来复制连续的对象

考虑以下Foo的定义:structFoo{uint64_tdata;};现在,考虑以下Bar的定义,它具有与Foo相同的数据成员,但有一个空用户-声明析构函数:structBar{~Bar(){}//使用带有-O2的gcc8.2,函数copy_foo():voidcopy_foo(constFoo*src,Foo*dst,size_tlen){std::copy(src,src+len,dst);}产生以下汇编代码:copy_foo(Fooconst*,Foo*,size_t):salq$3,%rdxmovq%rsi,%raxje.L1movq%rdi,%rsimovq%rax,%rd

c++ - 垃圾收集 C 会比 C++ 更快吗?

很长一段时间以来,我一直在思考如何在我的下一个项目中管理内存。这是用C/C++编写DSL。这三种方式都可以。引用计数C或C++。收集垃圾C.在C++中,将类和结构从一个堆栈复制到另一个堆栈,并使用某种GC单独管理字符串。社区可能已经对这些方法中的每一种都有很多经验。哪个会更快?各自的优缺点是什么?一个相关的问题。malloc/free会比在程序开头分配一大块并在其上运行我自己的内存管理器慢吗?.NET似乎可以做到。但我很困惑,为什么我们不能指望操作系统比我们自己做的更好更快地完成这项工作。 最佳答案 这一切都取决于!这是一个非常开放

ios - 如何优化代码并快速加载 UIPickerView 数据?

我正在用2个组件创建UIPickerView,分分钟和秒。我在UI中创建了选择器并想用数据填充它,下面是我如何用0-59的数字填充它的代码。我想让它看起来像圆形,这就是为什么kSizeOfPicker是60000。当用户按下按钮窗口时选择器出现但它会大大减慢应用程序的速度,因为这代码在viewDidLoad中。我该如何解决?NSString*stringValue=[[NSStringalloc]init];for(inti=0;i这里是数据源和委托(delegate)方法:#pragmamark-UIPickerViewDataSourceMethods-(NSInteger)num

ios - 需要优化IOS平台上的网络利用率。有引用吗?

是否有任何Apple引用或指南来了解何时从应用程序传输数据?场景包括:当radio刚刚激活时触发HTTP连接。此外,单次突发的最佳数据大小将有助于优化我的应用程序。我将不胜感激这方面的任何引用。 最佳答案 Apple提供了一个名为“Reachability”的类,它可能会对您有所帮助。它可以在网络状态发生变化时触发回调,即连接可用。http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

objective-c - 最小化重复代码?

我正在尝试像这样在ObjectiveC中做一个简单的检查:if((spriteA.tag==4&&spriteB.tag==10)){}不过,我正在尝试完成1if检查,同时实现以下目标:if((spriteA.tag==4&&spriteB.tag==10,11,12,13,14,15,16,17)){}现在我知道我可以使用||运算符,但这会使1if检查很多行代码,因此它看起来难以辨认.现在是否有任何有组织的方式来实现我想要做的事情?谢谢! 最佳答案 最简单的方法可能是制作一个位掩码intspriteBtags=(1然后用(1测试.