不要なFreeLibraryは避けよ

最近、同じプロセス内で何度も使うような関数を何度もFreeLibraryしている例を見ました。その遅さは見るに堪えないものでした。

LoadLibraryした後に決定される関数のアドレス(GetProcAddress)は、FreeLibraryしない限り、プロセス終了時まで変化することがありません。


つまり記憶しておけばよいのです。DLL_PROCESS_ATTACH等をうまく使い、再計算を避ける工夫をしましょう。

また、LoadLibraryのタイミングによっては、同じ関数でもアドレスが変わる可能性があるのでバグの原因にもなります。

ちなみに、メモリに制約があり、何度もLoadLibraryをしなくてはならないとしたら何に注意すべきでしょうか?

答えはBaseAddressです。

DLLをVC++のデフォルトで作成すると0x10000000あたりで固定だったと思いますが、特に同一プロセスで複数のDLLを使う場合にこれを設定しておくことは常識だと思います。

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz