12

Fortran에 새로운 코드를 작성하고 할당 가능한 배열이나 포인터 배열을 사용하는 것을 주저합니다.ALLOCATABLE 배열 또는 POINTER 배열?

들이 항상 메모리

2) 아니오 메모리 누수가 수 없습니다에 인접하기 때문에보다 효율적인

1)

누군가가이를 확인할 수 있습니다 : 나는 할당 가능한 배열 포인터 배열에 비해 상당한 장점을 가지고 선가? 어느 것을 사용 하시겠습니까? 이 두 가지 대안 사이의 코드 실행 속도의 결과는 무엇입니까?

+0

왜 메모리 누출을 할 수 없습니까? 'allocatable'으로 만든 배열을'DEALLOCATE' 할 필요는 없습니까? –

+0

@Carl - "할당하다"는 의미는 ... – Rook

답변

20

배열이 인접하므로 할당 가능한 배열로 인해보다 효율적인 코드가 생성 될 수 있습니다. 특히 배열이 서브 루틴으로 전달되면 연속적이므로 컴파일러가 임시 복사본을 만들 필요가 없습니다.

(SAVE 속성없이) (Fortran 95 이상) 서브 루틴의 로컬 변수의 경우, 할당 가능한 배열은 메모리 누수를 피하면서 서브 루틴 종료시 자동으로 할당 해제됩니다. 더 이상 필요없는 배열을 할당 해제하지 않는 프로그래머의 경우를 제외하고 할당 가능 메모리로 메모리 누출을 수행 할 수 없습니다.

포인터를 사용하면 포인터를 다시 할당 할 수 있습니다. 일부 메모리는 액세스 할 수 없으며 유실됩니다. 할당 가능 객체가 작업을 수행 할 경우 포인터 대신 해당 메소드를 사용하는 것이 좋습니다.

포인터를 사용하는 몇 가지 이유 : 배열 섹션을 가져 오거나 연결된 목록과 같은 데이터 구조를 만드는 것입니다. 런타임에 결정된 크기의 배열을 생성하기 위해 allocatable을 사용합니다.

+0

매우 명확한 설명을 해주셔서 감사합니다! – remek

+2

업데이트 : Fortran 2008을 사용하면 포인터 대신 할당 가능한 변수를 사용하여 링크 된 목록을 만들 수 있습니다. ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf의 5.3 항목을 참조하십시오. –