절대 최소 액세스 오버 헤드로 C++에서 2 차원 배열 (조밀 한 행렬)을 나타내는 방법이 필요합니다.C++ 2-D 배열 최적화
나는 다양한 리눅스/유닉스 기계와 gcc 버전에서 타이밍을 해왔다. 벡터의 STL 벡터로서 선언
vector<vector<double> > matrix(n,vector<double>(n));
및 배열로 선언보다 접근 5 %와 100 % 느린 사이 matrix[i][j]
통해 액세스 :
double *matrix = new double[n*n];
가 인라인 지수 함수
matrix[index(i,j)]
통해 액세스 여기서,
index(i,j)
은 i + n * j로 평가된다. STL을 사용하지 않고 2 차원 배열을 배열하는 다른 방법 - 각 행의 시작에 대한 n 개의 포인터 배열 또는 상수 크기로 스택에 모든 것을 정의
matrix[n][n]
- 인덱스 함수와 거의 동일한 속도로 실행됩니다 .
최근 GCC 버전 (> 4.0)은 STL 벡터 벡터를 최적화가 켜져있을 때 STL 코드와 거의 동일한 효율로 컴파일 할 수있는 것처럼 보입니다. 그러나 이는 다소 기계에 따라 다릅니다.
가능하면 STL을 사용하고 싶지만 가장 빠른 솔루션을 선택해야합니다. 누구든지 GCC로 STL을 최적화 한 경험이 있습니까?
이것은 std :: vector에서 실제로 작동합니까? 나는 그것을 의심한다. – lothar
참으로 놀랍고 무서울 것입니다. – peterchen