

リンカやローダについて勉強していると、「メモリに展開する」や「再配置」などという用語が出てきます。

はじめ「メモリに展開する」も「再配置」もどちらも同じ意味かと思ったのですが、  
どうやら同じ意味ではなく、「メモリに展開」がまさしくメモリに配置すること。  
「再配置」は、その配置したメモリのアドレスとシンボルの対応を管理すること。  
と思ったのですが、この認識であっていますでしょうか？

となると、前後関係がわかりません。メモリに展開した結果、たまたま今回配置されたアドレスを覚えておくことを「再配置」としているのか、その逆で、先にアドレスを決定したうえで、そこにローダーが配置しにいくのか。

（あまり本質問と関係ないですが、リンカのことをローダとも呼ぶ場合もあるようです）

再配置とロードの関係性について前後関係（処理の順番）を中心に教えてください。


CC BY-SA 4.0
2023-10-27T10:05:50.033
96601
2023-11-01T07:12:11.940
2023-10-27T10:34:18.600
9008
9008
question
c++ c
再配置とローダーの関係は？


概ねその理解であってると思います。用語には厳密な定義はありませんし、筆者それぞれの用語定義で語られているでしょうから、複数の筆者の文章を見比べたときに１つの語に複数の意味があったり、複数の語が同じ意味を持ったりはよくあることです。

その上で補足するならば、「再配置」は英語の **relocate** 、 **relocation**
の訳語の可能性があり、「位置をずらす」だけでなく「ずれた位置に合わせて調整する」というニュアンスも含んでいるかなと思います。  
そのため、あるモジュールをメモリに展開したら、そのモジュールを参照しているモジュールのアドレステーブルを更新するという行為が「再配置」という用語に込められているかなと。


CC BY-SA 4.0
2023-10-28T12:10:58.913
96610
2023-10-28T12:10:58.913
4236
96601
answer


>
> メモリに展開した結果、たまたま今回配置されたアドレスを覚えておくことを「再配置」としているのか、その逆で、先にアドレスを決定したうえで、そこにローダーが配置しにいくのか。

その理解は間違ってます  
オブジェクトは、（未確定な）アドレスの場所を空けたデータです。  
リンカ／ローダは、配置アドレスから、その空けているアドレスを計算し実際のアドレスを算出、その場所に計算結果を当てはめ、その結果をバイナリとして展開します。  
順序なぞありません


CC BY-SA 4.0
2023-11-01T07:12:11.940
96640
2023-11-01T07:12:11.940
27481
96601
answer