구조 필드 어레이를 전달하는 방법

피호출 프로그램에 구조 필드 어레이를 전달할 수 있습니다. call 명령문 및 피호출 프로그램의 매개변수 목록 둘 다에서 특수한 규칙을 따라야 합니다.

예를 들어, 다음 레코드 파트를 고려하십시오.
Record MyRecordPart type basicRecord
   10 myInt INT[5];
   10 myChar CHAR(1);
end 		
다음을 레코드 선언입니다.
myRecord MyRecordPart;
MyProgram 프로그램을 호출하는 중이고 단일 요소 또는 전체 레코드가 아니라 구조 필드 어레이를 전달해야 하는 경우 하나의 태스크에서는 다음과 같이 call 명령문을 코딩합니다.
call MyProgram( myRecord.myInt[*] );

대괄호 안에 별표가 있으면([*]) “선행 변수를 구조 필드 어레이로 처리”합니다. 대괄호 없이 myRecord.myInt를 지정하면 myRecord.myInt[1]을 코딩한 경우와 같이 프로그램이 어레이에서 첫 번째 요소만 수신합니다.

두 번째 태스크에서는 프로그램 자체의 매개변수 목록을 정의합니다.
Program MyProgram type BasicProgram ( myInt INT[5]! )
   
end 		

느낌표 지점은 선행 변수가 피호출 프로그램에서 크기를 조정할 수 있는 동적 어레이가 아니라 구조 필드 어레이임을 표시합니다. 각 어레이 차원 뒤에 어레이 크기 및 느낌표 지점이 필요합니다.

여기에 설명된 규칙을 사용하는 경우 호출이 전체 레코드를 전달한 경우보다 느릴 수 있습니다. 예를 들어, 다음 레코드 파트에 기반한 레코드를 고려하십시오.
Record X type BasicRecord
	10 myChar CHAR(4)[2];
		20 mySubChar01 char(2);
		20 mySubChar02 char(2);
end 		

mySubChar01 또는 mySubChar02 어레이를 전달할 때, 필드가 연속적으로 저장되지 않아도 메모리의 연속적 블록에서 전달됩니다. 데이터를 복사해야 하며 별도로 처리하는 데 시간이 걸립니다.

일반적으로 성능 문제가 다음 경우에 발생합니다.
  • 어레이가 [*]와 함께 전달됩니다.
  • 어레이의 상위 또는 기타 상위가 자체적으로 둘 이상의 하위가 있는 어레이입니다.

다차원 구조 필드 어레이가 저장되는 방식에 대한 세부사항은 “어레이”를 참조하십시오.