Main Content

행 우선 및 열 우선 배열 레이아웃

배열의 요소는 열 우선 레이아웃 또는 행 우선 레이아웃으로 저장될 수 있습니다. 열 우선 레이아웃으로 저장된 배열의 경우 열의 요소는 메모리 내에서 연속적입니다. 행 우선 레이아웃에서는 행의 요소가 연속적입니다. 배열 레이아웃은 순서, 형식, 표현이라고도 합니다. 요소가 저장되는 순서는 통합, 유용성 및 성능에 중요할 수 있습니다. 특정 알고리즘은 특정 순서로 저장된 데이터에서 더 효율적입니다.

프로그래밍 언어와 환경은 일반적으로 모든 데이터에 대해 단일 배열 레이아웃을 가정합니다. 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의 행 우선 레이아웃과 일치합니다. (복소수의 경우 배열 레이아웃 변환은 비켤레 전치를 사용합니다.)

참고 항목

| | |

관련 항목