如何避免分配给堆

时间:2013-05-14 19:33:32

标签: c arrays pointers

我试图通过在循环中不使用malloc来提高性能。由于数组的大小几乎总是相同的大小我试图使用堆栈变量,只有在数组太大时才替换它。不幸的是,这似乎不是我得到的行为。 这是我的代码snippit。这里有什么明显的错误。

    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;
    }

2 个答案:

答案 0 :(得分: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;
}

编辑:

您的代码还存在其他问题,例如将a分配给A,其中a的生命期短于A,无法判断您是否需要致电free,使用nng而不是其中一个 - 可能是一个错误,可能还会混淆phiA

答案 1 :(得分:0)

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