이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
가변 크기 배열에 대한 코드 생성
코드 생성 시 배열 차원은 고정 크기이거나 가변 크기입니다. 코드 생성기가 차원 크기를 확인할 수 있고 차원 크기가 변하지 않으면 차원은 고정 크기입니다. 배열의 모든 차원이 고정 크기이면 고정 크기 배열입니다. 다음 예제에서 Z
는 고정 크기 배열입니다.
function Z = myfcn() Z = zeros(1,4); end
첫 번째 차원 크기는 1이고 두 번째 차원 크기는 4입니다.
코드 생성기가 차원 크기를 확인할 수 없거나 차원 크기가 변하는 것으로 확인되면 차원은 가변 크기입니다. 차원 중 하나라도 가변 크기이면 가변 크기 배열입니다.
가변 크기 차원은 유계 또는 비유계입니다. 유계 차원의 상한 크기는 고정되어 있습니다. 비유계 차원의 상한 크기는 고정되어 있지 않습니다.
다음 예에서 Z
의 두 번째 차원은 유계의 가변 크기 차원입니다. 상한은 16입니다.
function s = myfcn(n) if (n > 0) Z = zeros(1,4); else Z = zeros(1,16); end s = length(Z);
다음 예에서, 컴파일 시점에 n
의 값을 알 수 없는 경우 Z
의 두 번째 차원은 비유계입니다.
function s = myfcn(n) Z = rand(1,n); s = sum(Z); end
다음을 수행하여 가변 크기 배열을 정의할 수 있습니다.
zeros
같은 생성자를 상수가 아닌 차원과 함께 사용변수를 사용하기 전에 변수에 여러 개의 상수 크기 할당
coder.varsize
를 사용하여 변수의 모든 인스턴스가 가변 크기를 갖도록 선언
자세한 내용은 Define Variable-Size Data for Code Generation 항목을 참조하십시오.
코드 생성에 가변 크기 배열을 허용할지 여부를 제어할 수 있습니다. 가변 크기 배열에 대한 지원을 활성화하거나 비활성화하기 항목을 참조하십시오.
가변 크기 배열에 대한 메모리 할당
크기가 임계값보다 작은 고정 크기 배열과 가변 크기 배열에 대해 코드 생성기는 스택에 정적으로 메모리를 할당합니다. 크기가 임계값보다 크거나 같은 가변 크기 비유계 배열과 가변 크기 배열에 대해 코드 생성기는 힙에 동적으로 메모리를 할당합니다.
MATLAB Function 블록의 경우 파라미터에 동적 메모리 할당을 사용할 수 없습니다. 파라미터는 고정 크기여야 합니다.
동적 메모리 할당을 허용할지 여부와 이를 코드 생성에서 사용할 시점을 제어할 수 있습니다. Control Memory Allocation for Variable-Size Arrays in a MATLAB Function Block 항목을 참조하십시오.
코드 생성기는 동적으로 할당된 데이터를 emxArray
라는 구조체형으로 표현합니다. 코드 생성기는 emxArray를 만든 후 이와 상호 작용하는 유틸리티 함수를 생성합니다. Embedded Coder®를 사용하는 경우 emxArray
유형 및 유틸리티 함수에 대해 생성된 식별자를 사용자 지정할 수 있습니다. Identifier Format Control (Embedded Coder) 항목을 참조하십시오.
가변 크기 배열에 대한 지원을 활성화하거나 비활성화하기
기본적으로 MATLAB Function 블록의 경우 가변 크기 배열에 대한 지원이 활성화되어 있습니다. 이 지원을 비활성화하려면 다음을 수행하십시오.
MATLAB Function 블록 편집기에서 데이터 편집을 선택합니다.
가변 크기 배열 지원 체크박스의 선택을 해제합니다.
MATLAB Function 리포트에 표시되는 가변 크기 배열
배열이 고정 크기인지 가변 크기인지는 MATLAB Function 리포트에서 변수 탭의 크기 열을 보면 알 수 있습니다.
콜론(:)은 차원이 가변 크기임을 나타냅니다. 물음표(?)는 크기가 비유계임을 나타냅니다. 예를 들어 크기 1×:?는 첫 번째 차원 크기는 고정 크기 1이고 두 번째 차원 크기는 비유계의 가변 크기를 나타냅니다. 기울임꼴은 코드에서 배열을 가변 크기 배열로 지정했지만 코드 생성기가 크기를 변경하지 않기로 결정했음을 나타냅니다.