행 우선 및 열 우선 배열 레이아웃
배열의 요소는 열 우선 레이아웃 또는 행 우선 레이아웃으로 저장될 수 있습니다. 열 우선 레이아웃으로 저장된 배열의 경우 열의 요소는 메모리 내에서 연속적입니다. 행 우선 레이아웃에서는 행의 요소가 연속적입니다. 배열 레이아웃은 순서, 형식, 표현이라고도 합니다. 요소가 저장되는 순서는 통합, 유용성 및 성능에 중요할 수 있습니다. 특정 알고리즘은 특정 순서로 저장된 데이터에서 더 효율적입니다.
프로그래밍 언어와 환경은 일반적으로 모든 데이터에 대해 단일 배열 레이아웃을 가정합니다. MATLAB®과 Fortran은 기본적으로 열 우선 레이아웃을 사용하는 반면 C와 C++는 행 우선 레이아웃을 사용합니다. MATLAB Coder™를 사용하면 행 우선 레이아웃 또는 열 우선 레이아웃을 사용하는 C/C++ 코드를 생성할 수 있습니다. Generate Code That Uses Row-Major Array Layout 항목을 참조하십시오.
컴퓨터 메모리에 배열 저장
컴퓨터 메모리는 1차원 배열로 데이터를 저장합니다. 예를 들어, 3×3 행렬을 선언하면 이 행렬은 요소를 9개 가진 1차원 배열로 저장됩니다. 기본적으로 MATLAB은 이러한 요소를 열 우선 배열 레이아웃으로 저장합니다. 각 열의 요소는 메모리 내에서 연속적입니다.
행렬 A
가 있다고 가정해 보겠습니다.
A = 1 2 3 4 5 6 7 8 9
행렬 A
는 기본적으로 메모리에서 다음 배열로 표현됩니다.
1 4 7 2 5 8 3 6 9
행 우선 배열 레이아웃에서 프로그래밍 언어는 행 요소를 메모리 내에 연속적으로 저장합니다. 행 우선 레이아웃에서 배열 요소는 다음과 같이 저장됩니다.
1 2 3 4 5 6 7 8 9
N차원 배열을 열 우선 레이아웃 또는 행 우선 레이아웃으로 저장할 수도 있습니다. 열 우선 레이아웃에서는 첫 번째(가장 왼쪽) 차원 또는 인덱스의 요소가 메모리 내에서 연속적입니다. 행 우선 레이아웃에서는 마지막(가장 오른쪽) 차원 또는 인덱스의 요소가 연속적입니다.
서로 다른 배열 레이아웃 간 변환
동일한 코드에서 행 우선 데이터와 열 우선 데이터를 혼합하여 사용하는 경우 배열 레이아웃 변환이 필요합니다. 예를 들어, 행 우선 함수 및 열 우선 함수 특수화를 포함하는 코드를 생성할 수 있습니다. 함수 특수화는 모든 입력값, 출력값 및 내부 데이터에 대해 한 가지 유형의 배열 레이아웃을 사용합니다. 함수 간에 데이터를 전달할 때 코드 생성기는 필요에 따라 배열 레이아웃 변환을 자동으로 삽입합니다. 생성된 MEX 함수의 입력 데이터 및 출력 데이터도 필요에 따라 변환됩니다.
2차원 데이터의 경우 전치 연산은 행 우선 레이아웃과 열 우선 레이아웃 간에 데이터를 변환합니다. A
의 전치된 버전이 있다고 가정해 보겠습니다.
A' = 1 4 7 2 5 8 3 6 9
A'
의 열 우선 레이아웃은 A
의 행 우선 레이아웃과 일치합니다. (복소수의 경우 배열 레이아웃 변환은 비켤레 전치를 사용합니다.)
참고 항목
coder.columnMajor
| coder.rowMajor
| coder.isRowMajor
| coder.isColumnMajor