Подтвердить что ты не робот

ALLOCATABLE массивы или массивы POINTER?

Я пишу новый код в Fortran и не решаюсь использовать распределяемые массивы или массивы указателей. Я где-то читал, что распределяемые массивы имеют значительные преимущества по сравнению с массивами указателей:

1) Более эффективны, поскольку они всегда смежны в памяти

2) Возможны утечки памяти

Может кто-нибудь подтвердить это? Какой из них вы бы посоветовали использовать? Каковы результаты с точки зрения скорости выполнения кода между этими двумя альтернативами?

4b9b3361

Ответ 1

Выделяемые массивы могут привести к более эффективному коду, потому что массивы будут смежными. В частности, если массив передается подпрограмме, непрерывность может предотвратить необходимость создания компилятором временной копии.

Для локальных переменных в подпрограммах (без атрибута SAVE) (для Fortran 95 и выше) распределяемые массивы автоматически освобождаются при выходе из подпрограммы, избегая утечки памяти. Утечки памяти невозможны с allocatables, за исключением того, что программист не освобождает массив, который больше не нужен.

С указателями вы можете переназначить указатель, оставив некоторую память недоступной и потерянной - одной из форм утечки. Если allocatable выполнит задание, я рекомендую использовать этот метод вместо указателя.

Некоторые причины использования указателей: выбор участка массива или создание структуры данных, например связанного списка. Для создания массива размера, определенного во время выполнения, я бы использовал allocatable.