我试图通过在循环中不使用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;
}
答案 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
,使用n
和ng
而不是其中一个 - 可能是一个错误,可能还会混淆phi
和A
答案 1 :(得分:0)
如果您使用的是Visual C ++,则可以使用_malloca/_freea
函数对根据阈值(恰好是您的1K)自动在堆栈和堆分配之间切换。如果您使用的是其他编译器,则可以创建自己的等效编译器。