我试图通过不在循环中使用malloc来提高性能。由于数组的大小几乎总是相同的,所以我试图使用一个堆栈变量,只有当数组太大时才替换它。不幸的是,这似乎不是我得到的行为。
这是我的暗号。这里有什么明显的问题吗。

    double *A
    if(n>1024){
        A = malloc( n * sizeof( *A ) );
        if( !A ) {
               fprintf( stderr, "Failed to allocate phi in calculate_forces()\n" );
               exit( EXIT_FAILURE );
        }
    }
    else{
        double a[1024];
        A=a;
    }

最佳答案

如果你在VisualC++中,你可以使用_malloca/_freea一对函数在一个阈值(恰好是你的-1K)的基础上自动在堆栈和堆分配之间切换。如果你在另一个编译器上,你可以创建你自己的等价物。

10-06 07:24
查看更多