2013-04-28 2 views
1

Fortran의 동등성 (a1, a2) 문에 a1과 a2라는 두 변수가 표시되어 동일한 메모리 공간을 차지한다는 것을 알고 있습니다. 그래서 이것은 a1과 a2가 그 절차에서 지역 변수 인 절차에서 발생한다고 말하십시오.Fortran의 'Equivalence'

즉, 메모리에 a1과 a2의 복사본 만있을 수는 없습니까? 값 중 하나가 겹쳐 쓰여지기 때문입니다. a1을 메모리 위치에 유지하고 전체 a2를 레지스터에 보관하면 괜찮을 것입니다.

내 질문은 기본적으로 : 당신은 전체 절차에 대한 레지스터에 a1을 유지할 수 있습니까?

나는 네가 레지스터를 다 쓰지 않고 a1이 메모리에 다시 저장 되어야만한다. 그런 다음 a2를 덮어 쓰고 값을 잃어 버리면 변수 a1과 a2가 실제로 a1의 값을 가리 킵니다.

답변

5

a1a2equivalence 문에 해당 변수가 동일한 저장소를 차지한다는 것을 의미합니다. 하나를 변경하면 다른 유형의 변수 인 경우에도 다른 하나를 변경합니다 (예 : a1은 정수이고 a2은 실수입니다). Fortran은 변수가 레지스터에 있어야한다고 지정하는 방법을 제공하지 않으며 equivalence 문이 자동으로 컴파일러를 금지 할 가능성이 매우 높습니다.

그래서

당신은 메모리 위치에 A1을 유지하고 에 대한 등록의 절차 전체를 A2를 유지하고이 잘 권리가있을 것입니다 수 있을까?

은 적용 할 수 없습니다.

equivalence을 사용하지 말 것을 강력히 권장합니다 ... 그것은 유감스럽게도 레거시 코드를 지원하는 언어로만 유지 될 가능성이 높습니다. 유형간에 데이터를 전송해야하는 경우 현대 Fortran 메소드는 transfer 내장 함수입니다.

+0

답변 해 주셔서 감사합니다. 이 질문에 이론적 인 의미로 대답 해 주시겠습니까? 즉, 포트란 프로그래머 관점에서 말입니다. 우리는 컴파일러에 관한 강의를 듣고 있으며 이것은 우리가 수정하고있는 질문입니다. 그래서 레지스터 할당에 관한 것이지 포트란 사용에 관한 것이 아닙니다 (우리는 포트란에서 전혀 프로그래밍하지 않습니다). – Awoken

+1

a1과 a2를 RAM에있는 레지스터와 레지스터에있는 레지스터와 같은 다른 위치에 배치하면 동등성 선언문에서 요구하는대로 프로그램을 작동시키는 것이 어려울 수 있습니다. 하나의 변수 값이 변경 될 때마다 컴파일러에 의해 생성 된 실행 파일은 다른 변수도 업데이트해야합니다. –

+0

메모리의 일부 장소에 대한 별칭으로 '동등성'을 고려하십시오. 아마도 타입 캐스트와 함께. –

2

equivalence을 사용하는 유일한 이유는 동일한 것에 대해 두 개의 이름을 갖는 것입니다. Fortran 프로그래머로서, 당신은 레지스터 등을 제어 할 수 없습니다. 메모리와 레지스터에 대해 생각하지 마십시오. 두 개의 이름을 가진 하나의 '상자'가 있다고 생각하십시오. 어떤 이름을 사용하든 동일한 상자에 저장하거나 검색하는 중입니다.