Dem*_*eep 3 c performance premature-optimization
世纪的问题?我基本上想知道如果我将这段代码写成几个不同的变量或者我使用的是小数组,哪个会更有效.
int x = 34;
int y = 28;
int z = 293;
Run Code Online (Sandbox Code Playgroud)
VS
double coordinate[3] = {34, 28, 293};
Run Code Online (Sandbox Code Playgroud)
我有一个坐标结构,我将按以下方式使用:
typedef struct coordinates_t {
double x = 0.0;
double y = 0.0;
double z = 0.0;
} coordinates;
typedef struct car_t {
coordinates start; // car starting point
coordinates location; // car current Location
coordinates targCarVector; // Vector to car from target
coordinates altitude; // Altitude of car
coordinates distance; // Distance from car start to current position
} car;
Run Code Online (Sandbox Code Playgroud)
我需要做的事情如下:
distance = car1.location - car1.start;
Run Code Online (Sandbox Code Playgroud)
如果我不使用数组,我将不得不有很多行代码,但如果我使用数组,我将不得不使用循环.阵列和循环是否更多内存/ CPU密集?我基本上试图看看哪种是编写此代码的最有效方法.
谢谢,DemiSheep
Phi*_*ter 21
效率对可维护性和可读性更重要吗?答案是不.即使您有一个时间要求严格的应用程序,您将花费90%的时间在不到10%的代码中,因此只有10%需要尽可能高效地编码.
如果你没有测量并发现哪个是10%是罪魁祸首,那么你几乎肯定会优化代码,这些代码首先不需要太多的运行时间.这是浪费时间.
小智 9
第一个问题是:你想优化它吗?最有可能的是,你不想这样做.至少不会,如果你"总是编码好像最终维护你的代码的那个人将是一个知道你住在哪里的暴力精神病患者".可读性,意图清晰度和可维护性始终是第一位的.
第二个问题是:值得优化吗?根据唐纳德·克努特的说法,97%的情况并非如此 - 而且你不会质疑克努特,对吗?另一个常见的经验法则是80/20规则,即80%的执行时间花费在20%的代码中.如果您完全优化,请首先了解要优化的位置.如果你猜,你错了.期.
第三个问题是:你能优化吗?不,你不能,至少不是这么容易.您认为比几十年来编写编译器的数百名程序员更聪明吗?你不是.如果可以优化算法和数据结构的实际实现,则可以假设编译器可以自行完成.编译器可以进行循环展开,指令重新排序,组合具有非重叠生命周期的变量,结构布局优化等等 - 在这个时代,它在大多数情况下甚至比大多数汇编程序员更好.即使有一点潜力,你最好专注于实现更好的算法.没有编译器可以将O(n ^ 2)转换为O(n log n),但也许是智能计算机科学家做到了这一点,你可以实现他的算法,以获得比任何微优化都能产生的更好的性能.
您必须为每个要执行此操作的平台进行测量.
但是我不认为这会产生任何明显的差异.(也许除了一些嵌入式平台.这是一个我不太了解的领域.)因此,首先以最容易阅读和理解的方式编写代码.然后测量你的代码是否要慢,并使用分析器找到程序花费很多时间的确切位置.然后尝试改进这些,在每次更改后测量,看看它有哪些效果.
提高易于理解的代码库的速度要比理解过早和不需要的"优化"的代码库容易得多.
可衡量的运行时间改进通常来自算法更改,而不是像这样的微优化.花时间试图找到更好的算法.
| 归档时间: |
|
| 查看次数: |
5273 次 |
| 最近记录: |