deallocate 문은 더 이상 필요없는 할당 가능 배열의 저장소를 복구하는 데 사용됩니다. 할당 할 수없는 배열은 어떻게됩니까? 주된 그리고 유일한 프로그램에 선언문이 있다고 가정 해보십시오.Fortran에서 할당 할 수없는 대형 배열의 저장소 복구
INTEGER, DIMENSION(100,100) :: A
이 배열은 한 번 사용한 다음 더 이상 사용하지 않습니다. 공간을 확보하려면 어떻게해야합니까?
deallocate 문은 더 이상 필요없는 할당 가능 배열의 저장소를 복구하는 데 사용됩니다. 할당 할 수없는 배열은 어떻게됩니까? 주된 그리고 유일한 프로그램에 선언문이 있다고 가정 해보십시오.Fortran에서 할당 할 수없는 대형 배열의 저장소 복구
INTEGER, DIMENSION(100,100) :: A
이 배열은 한 번 사용한 다음 더 이상 사용하지 않습니다. 공간을 확보하려면 어떻게해야합니까?
예제는 할당 가능한 배열이 아니라 간단한 정적 배열입니다. 할당 된 배열은 생성 된 범위에만 존재합니다. 정적 배열에 할당 된 메모리는 일반적으로 변수가 범위를 벗어나면 해제되지만 암시 적 저장과 같은 다른 상황에 따라 달라집니다.
할당 가능한 배열이 되려면 배열에 ALLOCATABLE이 있어야합니다 선언. 또한 할당해야합니다.
할당 가능한 배열의 가장 큰 점은 FORTRAN이 할당 취소를 관리한다는 것입니다.
배열이 범위를 벗어나 자마자 fortran이 할당을 해제합니다. 이렇게하면이 배열에서 메모리 누출 위험이 없습니다.
예 루틴의 마지막 http://www.fortran90.org/src/best-practices.html
subroutine do_something
real(dp), allocatable :: lam
allocate(lam(5))
...
end subroutine do_something
각색의 램 어레이는 자동으로 해제된다.
* "실행 범위를 벗어난 메모리는 해제됩니다"* 배치 위치에 따라 다릅니다. 암시 적으로 저장되면 (주 프로그램 또는 모듈에 있음) 할당 해제되지 않습니다. 서브 루틴에 있으면 스택에 배치되거나 정적이거나 힙에 할당 될 수 있으며 동작을 변경합니다. –
당신은 완전합니다. 나는 당신의 관찰을 고려하여 대답을 업데이트했다. – Jauch
공간을 확보하려면 어떻게해야합니까? 할당 가능한 배열을 사용하십시오. –
아마 내가 틀렸어.하지만 배열이 얼마나 많은 요소로 구성 될지 미리 알지 못하면 할당 가능한 배열을 사용한다. 배열이 정의에 따라 알려진 치수를 갖는 경우가 있습니다 (예 : 관성 텐서는 3x3 행렬 임). 그렇다면이 경우에도 솔루션을 할당 가능하게 만들고 할당 한 다음 할당을 해제하는 것입니다. –
할당 가능 항목 (및 포인터)은 동적 연결/메모리 관리를 수행합니다. 그렇습니다. 명시적인 크기가 가능할 때조차도 이와 관련하여 유용합니다. – francescalus