2016-11-07 6 views
2

При создании массива, как язык, например fortran, делает записи активации, когда он находится во всей статической среде (поскольку он не знает размер массив во время компиляции)? Я знаю, что он использует передачу по ссылке, так это значит, что в записи активации она хранит ссылку вместо массива, которая позволяет ему хранить ссылку на массив, который еще не был создан?Активационные записи и массивы в Fortran (или языки со всеми статическими средами)

+0

Что вы подразумеваете под всеми статическими условиями? Вы должны понимать, что один и тот же массив можно посмотреть по-разному и может использовать дескриптор массива в одной области видимости и простой указатель в другой области. –

+0

Кроме того, Fortran не проходит по простой ссылке. И когда это нужно, дескриптор часто не нужен, просто указатель. –

+0

Итак, как он использует учетные записи активации? Как сделать пространство в записи активации для массива неуказанных размеров? –

ответ

1

Вы можете быть смущены, потому что обычно говорят, что во многих реализациях FORTRAN имеется одна запись активации для каждой подпрограммы, которая может быть распределена статически как расширение сегмента кода. (см., например: 4-е издание «Языки программирования, проектирование и реализация» от TW Pratt & MV Zelkowitz.)

Что-то, о чем следует помнить, заключается в том, что даже в этом случае запись активации всегда заполняется во время исполнения пространство выделяется статически. Это легко понять, поскольку в одной и той же подпрограмме может быть много вызовов. И все эти звонки имеют одну и ту же активационную запись, и каждый звонок остается только одним.

Что еще более важно, данные массива не включаются в запись активации. Передача аргумента по ссылке означает отсутствие дублирования данных. В запись активации включена только ссылка (указатель или любой другой вариант реализации). В подпрограмме доступ к элементам массива затем может быть вычислен с помощью механизма базового адреса + смещения.

+0

Итак, массивы возможны, потому что ссылка хранится только в записи активации, правильно? –

+0

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