处理需要GA的问题。在完成编译器优化之前,我已经完成了所有这些工作并花了相当多的时间来修剪脂肪并优化代码。因为GA由于用户输入而运行,所以它必须在合理的时间段内找到解决方案,否则UI会停止并且根本不会很好地运行。我得到了这个二进制GA在iPhone 3GS上解决了一个大约0.1秒的27变量问题。
为了达到这种性能水平,整个GA都用C编码,而不是Objective-C。
为了进一步缩短运行时间,我考虑了仅为解算器模块使用“-O3”优化开关的想法。我尝试了它,它将运行时间减少了近一半。
我应该通过将优化设置为“-O3”来关注任何问题吗?请记住,我在文件级别执行此操作,而不是整个项目。
答案 0 :(得分:5)
-O3
标志将使代码以与之前相同的方式工作(仅更快),只要您不做任何不安全或者依赖于编译器对其做什么的棘手的事情。
此外,正如评论中所建议的那样,让计算在单独的线程中运行以防止UI锁定可能是个好主意。这也使您可以灵活地使计算更加昂贵,或者显示进度条等等。
棘手的东西
如果您尝试直接访问堆栈中的内容,或者将堆栈指针移动到其他位置,或者如果您执行某些本质上非法的操作(例如忘记初始化变量),
将产生意外结果编译器(MinGW)将它们设置为0)。
E.g。
int main() {
int array[10];
array[-2] = 13; // some negative value might get the return address
}
其他一些棘手的事情涉及优化器自身填充。当-O3
完全破坏代码时,这是example。