1

我试图通过不在循环中使用 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;
    }
4

2 回答 2

3

您缺少一个大括号,因此更改了实现的逻辑

double *A
if(n>1024){
    A = malloc( ng * sizeof( *phi ) );
    if( !phi ) {
           fprintf( stderr, "Failed to allocate phi in calculate_forces()\n" );
           exit( EXIT_FAILURE );
    }
}                 // this is the brace you need to add <<<<<<<<<<<<<<<<<
else{
    double a[1024];
    A=a;
}

编辑:

您的代码还有其他问题,例如分配ato A,其中的a寿命短于A,无法判断您是否需要调用free,使用nandng而不是其中一个 - 可能是一个错误,也可能混淆phiA

于 2013-05-14T19:36:34.097 回答
0

如果您使用的是 Visual C++,则可以使用这_malloca/_freea对函数根据阈值(恰好是您的阈值 - 1K)在堆栈和堆分配之间自动切换。如果您使用的是另一个编译器,则可以创建自己的等价物。

于 2013-05-14T20:53:15.487 回答