AUTOMATIC·STATIC 속성
AUTOMATIC·STATIC 속성 (AUTOMATIC and STATIC attributes)
변수의 저장 공간(스택인지 정적 메모리인지)을 명시적으로 지정하는 DEC 확장 속성을 소개해요. SAVE 문법과 같은 모양으로 쓰되, 더 세밀하게 제어할 수 있죠.
본문
-fdec-static 옵션을 쓰면 GNU Fortran은 DEC 확장 속성인 STATIC과 AUTOMATIC을 지원해서, 엔티티의 저장 공간을 명시적으로 지정할 수 있어요. 이 속성들은 포트란 표준의 SAVE 속성과 같은 문법을 따라가요.
STATIC은 정확히 SAVE와 동일해서, 엔티티가 **정적 메모리(static memory)**에 할당되도록 지정해요. 예를 들어 STATIC 지역 변수는 함수를 여러 번 호출해도 값을 그대로 유지해요.
AUTOMATIC으로 표시된 엔티티는 가능하면 언제나 스택 자동변수(stack automatic)가 돼요. 지역 변수에서 AUTOMATIC은 -fmax-stack-var-size보다 작은 경우의 기본값인데, -fno-automatic이 주어지면 그렇지 않게 돼요. 이 속성은 -fno-automatic, -fmax-stack-var-size, 그리고 포괄적인 SAVE 문을 덮어씁니다(override).
예시를 볼게요.
subroutine f
integer, automatic :: i ! automatic variable
integer x, y ! static variables
save
...
endsubroutine
subroutine f
integer a, b, c, x, y, z
static :: x
save y
automatic z, c
! a, b, c, and z are automatic
! x and y are static
endsubroutine
! Compiled with -fno-automatic
subroutine f
integer a, b, c, d
automatic :: a
! a is automatic; b, c, and d are static
endsubroutine
세 번째 예시는 -fno-automatic으로 컴파일한 상황이에요. 기본 규칙이 "전부 정적"으로 뒤집혀 있더라도, automatic :: a 한 줄로 a만 스택 자동변수로 만들 수 있는 걸 보여주죠. AUTOMATIC 속성이 다른 플래그를 덮어쓰는 이유가 여기서 드러나요.
더 알아보기
- SAVE 문과 저장 공간 지정
- 하위 버전 호환 및 DEC 확장 옵션
- GNU Fortran 컴파일러 지시문