配列の確保、初期化、解放にかかる時間を比べてみました
newも mallocも callocも変わらないようです
書式が簡明なnewを使うべきかな

#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000

main(){
int i,j,k;
clock_t s,t,u;

s=clock();for(k=0;k<200;k++){
double **w = new double *[N];for (i=0;i<N;i++)w[i]=new double [N];
for(i=0;i<N;i++)for(j=0;j<N;j++)w[i][j]=0.0;
for(i=0;i<N;i++)delete[] w[i];delete[] w;}
s=clock()-s;

t=clock();for(k=0;k<200;k++){
double **v = (double**)malloc(N * sizeof(double*));for(i=0;i<N;i++)v[i]=(double*)malloc(N * sizeof(double));
for(i=0;i<N;i++)for(j=0;j<N;j++)v[i][j]=0.0;
for(i=0;i<N;i++)free(v[i]);free(v);}
t=clock()-t;

u=clock();for(k=0;k<200;k++){
double **x = (double**)calloc(N,sizeof(double*));for(i=0;i<N;i++)x[i]=(double*)calloc(N,sizeof(double));
for(i=0;i<N;i++)free(x[i]);free(x);}
u=clock()-u;

printf("2次元配列の確保、初期化、解放にかかる時間\nnew=%d malloc=%d calloc=%d\n",s,t,u);}