C++ C/C++;优化

C++ C/C++;优化,c++,c,compiler-construction,C++,C,Compiler Construction,在编程方面,我是以一种非常面向对象的方式成长起来的,不幸的是,这意味着高度优化的代码不是我的专长。我现在相当擅长C语言,通常可以用相当智能的方式来做事情,但我仍然难以找到处理情况的最佳方式 一个例子是: int strlen(const char* str) { char* s; for (s=str; *s; ++s); return s-str; } 我自己也不会想到这一点 那么,有哪些好的资源可以让您接触到这样的优化代码呢?我想找一个地方,在那里我可以读到它背后的

在编程方面,我是以一种非常面向对象的方式成长起来的,不幸的是,这意味着高度优化的代码不是我的专长。我现在相当擅长C语言,通常可以用相当智能的方式来做事情,但我仍然难以找到处理情况的最佳方式

一个例子是:

int strlen(const char* str)
{
    char* s;
    for (s=str; *s; ++s);
    return s-str;
}
我自己也不会想到这一点

那么,有哪些好的资源可以让您接触到这样的优化代码呢?我想找一个地方,在那里我可以读到它背后的理论,编译器在后台做了什么,这使它有价值,等等


如果有一些资源专门用于研究应用于实际场景的优化数据结构,那也很好,但这可能要求太多。

不要在微观优化方面太过努力。对于现代编译器,最好让编译器处理类似的优化。最好花时间为应用程序选择正确的算法和设计模式。找到一个合适的分析器,学习如何使用它。不要浪费时间试图找出如何优化strlen

关于如何进行这些微优化的参考资料,我之前已经提到过,但我很乐意再次提及,Agner的指南非常出色,而且是免费的:)请看:应该有很多指南

顺便说一句:我见过的最优化的strlen版本是由Agner制作的,并且是用汇编编写的。;-)

是一个有趣的资源。它涉及到很多愚蠢的低级细节


优化的一个要点是代码大小。如果你利用智能OO设计,小型设计,你就是在优化。我个人认为,忽略小细节,专注于高水平,会让你在速度和职业生涯上走得更远。此外,gprof在这方面比你以往任何时候都要出色。

除了微不足道的
int count=0;而(str++)count++;返回计数?@Stargazer712 Q中的版本有一半的算术运算没有经过优化,这是模糊的。如果我确实知道这一点,我就不会问这个问题了,但从我被告知的情况来看,它显然更优化了。不管怎样,这只是我的例子,我想要一本关于优化和如何“快速思考”的好书/网站。我一直认为我是在工作中这样做的,直到我开始交叉面试到一个好的财务场所。为扩大维护预算而优化?我部分同意。的确,选择算法和模式会更好地优化您的时间,但在我看来,一个好的程序员应该考虑他正在编写的代码。当只需要5行代码时抛出10行代码是没有用的(显然strlen的情况不是这样)。没错,但大多数时候任何现代编译器都会帮你节省时间,而且当人们要求优化并显示
strlen
作为一个例子时,你知道他们问的理由都是错误的。我也有点不同意。虽然通常是正确的,但在某些情况下,代码可能会引入约束,从而阻止应用某些优化。每当程序员构建一个循环时,他们应该总是考虑每次迭代将产生多少操作(这真的不太难)。在许多情况下,由于副作用,循环内的额外函数调用超出编译器优化范围;这真的取决于程序员知道这一点。