2016-11-16 8 views
1

C++/Matlab/Java 배경에서 나오는 Fortran을 배우기 시작했습니다. 필자는 일부 Fortran 프로그래머가 여전히 객체 지향, 네임 스페이스 및 물건을 좋아하지 않고 이전 구문에 익숙하기 때문에 F77에 매달리고 있음을 알고 있습니다.Fortran 77 프로그래머는 동적 메모리 할당없이 어떻게 관리합니까?

OOP없이 프로그램을 작성할 수 있다는 것을 이해합니다. 내가 이해할 수없는 것은 동적 메모리 관리없이 어떻게 할 수 있는지입니다. 예를 들어 전체 행렬을 드문 드문 한 행렬로 변환 할 때와 같이 미리 배열 크기를 모르는 경우가 수천 가지가 있습니다.

물론 현대 Fortran은 "자동 배열"과 "할당 가능한 배열"을 모두 제공합니다. 그러나 이것들은 1977 년에 존재하지 않았습니다. F77 녀석들은 어떻게 이러한 구조없이 관리합니까?

+1

FORTRAN 77은 일부 선택된 초기 조건 (예 : 고정 크기 필드)이 확장 된 기간 동안 진화되어 데이터를 쓰는 과학 컴퓨팅에 주로 사용되었습니다. 실행 중에는 사용자 입력이 없으며 어레이가 얼마나 커야하는지 정확히 알 수 있습니다. Fortran 코드가 더 효율적이라고하는 이유 중 일부입니다. –

+0

한 가지 방법은 하나의 큰 배열 (작업 영역)을 선언 한 다음 정수 인덱스를 사용하여이를 다양한 크기 섹션으로 분할하는 것입니다. (필자는 f77과 함께 작업하지 않았으므로이 접근법이 실제로 얼마나 공통적 인 지 잘 모르겠습니다.) –

+1

@Ed Smith 음, 고정 된 크기 (예를 들어 수치 선형 대수)를 가진 과학 컴퓨팅 분야에는 많은 응용 프로그램이 있지만 알 수없는 크기 (구조화되지 않은 메쉬, 가변 스텝 길이가있는 시간 통합, 스파 스 행렬 등)가 많은 응용 프로그램이 많이 있습니다. – akvilas

답변

5

표준 언어에서 접근법은 일반적으로 프로그램을 실행하는 플랫폼의 제약 조건 내에서 여전히 필요한 것보다 큰 배열에 스토리지를 따로 설정 한 다음 필요한 경우 해당 스토리지를 수동으로 파싱합니다. 이 언어는 시퀀스 연관성, 저장 연관성 및 조정 가능한 배열과 같은 기능을 갖추고있어이 구문 분석에 도움이되었습니다.

동적 메모리 관리를 위해 언어 확장을 사용하는 것이 일반적이었습니다.

Fortran 77 이전 버전의 기능은 해당 플랫폼의 기능과 관련하여 고려해야합니다.

+1

에 의해 채택 된 여러 플랫폼에서 80s에서 지원되는 확장입니다. 유효한 모든 포인트. 나는 아마도 지난 60 년 동안의 컴퓨터와 언어의 위대한 혁명을 진정으로 파악하기에는 너무 어려울 것입니다. 초기에는 메모리가 너무 비쌌으므로 가변 길이 배열의 수동 관리가 의미가있었습니다.또한 malloc과 유사한 구조가 F90에서 결국 채택 될 때까지 언어 확장 또는 외부 절차에 의해 제공된다는 점도 의미가 있습니다. (또한, F77이 실제로 C 표준보다 오래되었음을 깨닫게되었습니다 ...) – akvilas

+0

포트란 90도 [상당히 지연되었습니다] (https://www.fortran.com/forsaga) .html). 그 형태는 처음에는 Fortran 82로 알려졌습니다! – IanH

+0

저는 80 년대 초반에 5MB 이동식 하드 드라이브가 장착 된 컴퓨터를 가지고 있었고 그 컴퓨터에는 32KB의 RAM이있었습니다 ... 빠른 것 같았지만 코드를 통해 스트리밍하는 데 필요한 거의 모든 것. 오늘날의 컴퓨터는 40 코어와 192GB의 RAM과 10TB의 RAID를 가지고 있습니다. 하나의 벡터에 할당하고 스택에 넣는 200M이 있습니다 ... 그리고 많은 코어에서 여러 인스턴스를 실행합니다. 입출력 제한. 모든 것이 문자 그대로 백만 배 더 좋고/더 커집니다. – Holmz