2014-04-09 5 views
0

내 코드와 그 행렬을 선언하고 초기화하는데 걸리는 시간이 이상하다는 것을 알게되었습니다.2D 행렬 선언의 차이점

첫 번째 방법 :

vector< vector<double> > gblStiff(dOF, vector<double>(dOF, 0)); 

DOF는 어떤 결정 값 이전 코드에서였다. 이 첫 번째 방법은 약 3 초 dOF = 30000 때했다 !!

번째 방법 :

double** gblStiff = new double*[dOF]; 
for (i=0; i < dOF; i++) 
    gblStiff[i] = new double[dOF]; 

두 번째 방법은 동일한 DOF위한 0.063 초가 소요!

왜 이런 일이 일어나고 있는지 알 수있는 사람이 있습니까? 나는 매우 궁금하다.

+0

단일 연속 버퍼가 더 빠릅니다. 'gblStiff [dOF * row + col]'(또는 저장소 순서와 색인 정의에 따라 그 반대)로 색인을 생성하십시오. – Peter

답변

0

이것은 실제로 C++ 문제입니다. 첫째, 아마도 최적화로 컴파일하지 않았을 것입니다. vector 템플릿을 사용하려면 약간의 컴파일러 도움이 필요합니다. 둘째, vector의 생성자가 모든 요소를 ​​초기화합니다. 귀하의 경우에는 dOF*dOFdouble을 0으로 초기화합니다. new double[dOF] 그런 일은 없습니다. 그 기억은 무엇이든 포함 할 수 있습니다.