C 算法的优化

C 算法的优化,c,algorithm,optimization,C,Algorithm,Optimization,以下是给出相同结果的两个代码: 代码1 #包括 int main(int argc,字符**argv) { int res,nbMax=0,i; 无符号长j; 对于(i=1;i nbMax){//我不能在这里复制它,但它取决于您使用的平台和编译器。根据编译器中使用的优化算法,您的代码的某些部分可能会更改。如果某些内容不影响您的代码,则可能会在优化阶段退出循环,甚至在代码中被忽略,而编译。你可以在循环优化中查看编译器优化技术,了解一些细节。我无法复制这一点。在amd64 gcc(Ubuntu 4.

以下是给出相同结果的两个代码: 代码1

#包括
int main(int argc,字符**argv)
{
int res,nbMax=0,i;
无符号长j;

对于(i=1;i nbMax){//我不能在这里复制它,但它取决于您使用的平台和编译器。根据编译器中使用的优化算法,您的代码的某些部分可能会更改。如果某些内容不影响您的代码,则可能会在优化阶段退出循环,甚至在代码中被忽略,而编译。你可以在循环优化中查看编译器优化技术,了解一些细节。

我无法复制这一点。在amd64 gcc(Ubuntu 4.8.2-19ubuntu1)上4.8.2使用
-O3
,第一段代码运行时间约为0.30秒,第二段代码运行时间约为0.33秒。此处相同,在我结束时无法复制:
代码1:编译时间:0.13秒,绝对运行时间:0.35秒,cpu时间:0.22秒,内存峰值:3 Mb,绝对服务时间:0.48秒
-------------------------------------------------------------------------------------------------
cod2:编译时间:0.13秒,绝对运行时间:0.45秒,cpu时间:0.38秒,内存峰值:3MB,绝对服务时间:0.58秒
您还可以尝试使用什么优化?
#include <stdio.h>
int main(int argc, char **argv)
{
    int res, nbMax = 0, i;
    unsigned long j;
    for (i = 1; i <= 1000000; i++) {
        j = i;
        int nb = 1;
        while (j != 1) {
            nb++;
            if (j % 2 == 0) {
                j = j / 2;
            } else {
                j = 3 * j + 1;
            }
        }

        if (nb > nbMax) { // <-
            nbMax = nb;
            res = i;
        }
    }
    printf("longest: %d (%d)\n", res, nbMax); 
    return 0;
}
#include <stdio.h>
int main(int argc, char **argv)
{
    int res, nbMax = 0, i;
    unsigned long j;
    for (i = 1; i <= 1000000; i++) {
        j = i;
        int nb = 1;
        while (j != 1) {
            nb++;

            if (nb > nbMax) { // <-
                nbMax = nb;
                res = i;
            }
            if (j % 2 == 0) {
                j = j / 2;
            } else {
                j = 3 * j + 1;
            }
        }

    }
    printf("longest: %d (%d)\n", res, nbMax); 
    return 0;
}