"Эквивалентность" в Фортране
Я понимаю, что две переменные, скажем, 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
это иметь два имени для одной и той же вещи. Как программист на Фортране, вы не можете управлять регистрами или чем-то подобным. Не думай о памяти и регистрах. Подумайте, что у вас есть одна "коробка" с двумя именами. Какое бы имя вы ни использовали, вы сохраняете или извлекаете данные из одной и той же коробки.