【发布时间】:2014-03-08 08:22:01
【问题描述】:
好的,在我发布这个问题之前,我肯定知道这个社区中有这些所谓的“专业人士”指责我过早的优化。让我说清楚:我想确定我到底在写什么,即使它在函数内部的堆栈级别是这样的细微差别。 我有一个多维数组,我知道为了访问数据,您需要访问这些索引变量,然后访问数组本身,这会占用大量时间。所以我这样做了:
char* ref = gdata.mapnames[game.maptype][game.map];
size_t a = strlen(ref) - 4;
ref[a] = '\0';
strcpy(temppath, ref);
ref[a] = '.';`
我将多维数组“包装”在一个用作指针的简单局部变量中。由于我必须多次访问同一个数组,这种方法可以节省查找时间并因此节省运行速度吗?当然理论上,由于现在的处理器是如此之快,你不会看到任何区别,除非我编写更大的应用程序需要这个。多维数组不是坏习惯吧?
【问题讨论】:
-
多维数组当然不是一个坏习惯。但是,我不知道您要加快什么速度。
-
在这种情况下缓存数组元素查找的结果是个好主意。有些人确实将常识称为过早的优化,不要对此感到沮丧。
-
你为什么要
ref[a] = '\0'?strlen仅在ref指向字符串时才有效,即以空字符结尾的字符数组,否则会出错。 -
您的代码对我来说似乎是过早的未优化。为什么你扫描
ref两次而不是一次?为什么要对ref[a]进行两次冗余写入? -
你没有优化任何东西。您专注于确保编译器不愚蠢(它们不再愚蠢),而不是专注于使您的算法更好(编译器无法为您优化)优化您的算法,然后使用 -O3 或其他任何东西进行编译最大优化。如果您认为尚未进行此类优化,请检查生成的程序集。
标签: c arrays performance