"Эквивалентность" в Фортране

Я понимаю, что две переменные, скажем, a1 и a2, появляются в выражении эквивалентности (a1,a2) в Fortran, а затем они занимают одно и то же пространство памяти. Допустим, это происходит в процедуре, где и a1, и a2 являются локальными переменными в этой процедуре.

Это означает, что вы не можете иметь только копии a1 и a2 в памяти, верно? Потому что одно из значений будет перезаписано. Вы можете сохранить a1 в памяти и сохранить a2 в регистре для всей процедуры, и это будет хорошо, верно?

Мой вопрос в основном: можете ли вы сохранить a1 в реестре для всей процедуры?

Я бы сказал да... если вы не исчерпали регистры и a1 должен быть сохранен обратно в память. Затем вы перезапишете a2 и потеряете его значение, и тогда обе переменные a1 и a2 будут фактически указывать на значение a1.

2 ответа

Решение

a1 а также a2 в equivalence оператор означает, что эти две переменные будут занимать одну и ту же память. Изменение одного изменит другое, даже если они являются переменными разных типов (например, a1 является целым числом и a2 это реально.) Фортран не дает никакого способа указать, что переменная должна быть в регистре, и кажется весьма вероятным, что equivalence оператор запретит компилятору делать это автоматически.

Так

Вы можете сохранить a1 в памяти и сохранить a2 в регистре для всей процедуры, и это будет хорошо, верно?

неприменимо

Я настоятельно рекомендую против использования equivalence... это пагубно и, скорее всего, сохраняется только в языке для поддержки унаследованного кода. Если вам нужно передавать данные по типам, современный метод Фортрана - это transfer внутренняя.

Единственная причина использовать equivalence это иметь два имени для одной и той же вещи. Как программист на Фортране, вы не можете управлять регистрами или чем-то подобным. Не думай о памяти и регистрах. Подумайте, что у вас есть одна "коробка" с двумя именами. Какое бы имя вы ни использовали, вы сохраняете или извлекаете данные из одной и той же коробки.

Другие вопросы по тегам