次の方法で共有


リンカー ツールの警告 LNK4092

共有書き込みセクション 'section' は再配置を含んでいます。イメージは正しく動作しない可能性があります

リンカーは、深刻な問題が発生する可能性があることを警告するために、共有セクションがある場合には必ずこの警告を発します。

複数のプロセス間でデータを共有する方法の 1 つは、セクションを "共有" としてマークすることです。ただし、セクションを共有としてマークすると、問題が発生する可能性があります。 たとえば、共有データ セクションに次のような宣言を含む DLL があります:

int var = 1;
int *pvar = &var;

pvar の値は DLL がメモリ上のどこにロードされるかに依存するため、リンカーは解決できず、DLL にリロケーション レコードを入れます。 DLL がメモリに読み込まれると、var のアドレスを解決して pvar が割り当てられます。 別のプロセスが同じ DLL をロードし、同じアドレスでロードできなかった場合、var のアドレスの再配置は 2 番目のプロセス用に更新され、最初のプロセスのアドレス空間は間違ったアドレスを指します。