
高速化の為に/BASEオプションや defファイルなどで dll やプロセスのベースアドレスを設定する場合についてですが、これはどういう風にアドレスを設定すればいいのでしょうか?
例えばプログラムや dll がメモリにロードされる時に、マルチプロセスな OS 用のアプリケーション等の場合だと他にどんなモジュールがメモリに配置されているかは実行時じゃないとわかりませんよね?こういう場合はベースアドレスは普通設定しないものなのでしょうか?
それと、複数の同時に使用される可能性のある dll を作成する場合に、ベースアドレスを重ならないように設定するといいとのことですが、これは単純に "A.dll のベースアドレスに A.dll の大きさ(バイト)を足したものを B.dll のベースアドレスにする" みたいな感じでいいでしょうか?
それからもう1つ、高速であるべきモジュールを作成する時に、どうしても再配置によるオーバーヘッドを払いたくない場合、初期化時に、ソースコード中のアドレスを指定している部分を実行時のベースアドレスとオフセットによって書き換える、ということをしたらいいんじゃないかと思ったのですが、こんなことをするのは現実的ではないですか?(ロード時間がある程度かかるのは気にしないとして)
1つでも回答いただけたら嬉しいです。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
一応 MS 推奨のベースアドレスというのがあります。
昔 MSDN で見かけた情報なのですが、今調べても見つけられませんでした。確か rebase のツールの説明あたりから辿れたような気がしたのですが・・・。大まかに言えば DLL のファイル名の先頭の文字で分類して、A-D は 0x60000000, E-G は 0x61000000 といった具合で 0x69000000 くらいまで使用していたと思います。もちろん、ご自分の DLL に lib1.dll, lib2.dll があれば、lib1 と lib2 がかぶらないように調節してください。
ちなみに、どんなモジュールが配置されるかは確かに分かりませんが、自分のプロセスに関して言えば OS の DLL(こいつらはベースアドレスが決まっています)と自分が使用している DLL だけを気にすれば十分です。というか、他に IME の DLL とかもロードされますが、そこまで含めてコントロールするのは現実的には難しいでしょう。
それから、使用するアドレス空間を算出するには EXE ファイルの構造を知らないといけませんが、実用上は rebase したときにその DLL がどこからどこまでを使用したかが表示されるので、次の DLL のベースアドレスはその後ろに持ってくるだけでオーケーです。
高速化についてのご質問は意図がよく分からないのでパスで。ロード時間がある程度かかるのが許容できるなら、別にロード時に再配置されたって構わないような気がしますが?
>>OS の DLL(こいつらはベースアドレスが決まっています)と自分が使用している DLL だけを気にすれば十分
>>次の DLL のベースアドレスはその後ろに持ってくるだけでオーケー
単純にならべるだけでOKなんですね!(64kbで区切るんでしたっけ)
高速化についてはちょっと勘違いしていたので忘れてください。
回答ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
res://ieframe.dll/について
-
VB.NET xdoc2txtをつかってPDF...
-
wavからmp3に変換する方法
-
python エラー
-
<unistd.h>をVisualStudioでつ...
-
” OS ビルド ” の意味が分か...
-
ビルドとリビルドの違いを教え...
-
visual studio2019でデバッグが...
-
適切な変換関数が存在しない???
-
外部依存関係について
-
「fatal error C1189」を回避す...
-
vb2010にてASPWEBシステムを作...
-
VB2008で定数に色の設定をした...
-
ダイアログなどの文字列が文字...
-
エクセルVBAではRound...
-
コールバック関数指定時のエラー
-
c言語です コンパイルした時に...
-
Excelのエラーで困ってます。
-
C++Builder → Visual C++ 移植...
-
リンカのエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
指定された引数が有効範囲にな...
-
ASP.NETのDLL入れ替えについて
-
res://ieframe.dll/について
-
user32.dllがないためアプリが...
-
visual studioの不要なDll削除方法
-
C# DLL エントリ ポイントが...
-
VB6.0(SP6)にて開発を行なって...
-
VBAエディタのコード画面で、カ...
-
VC++2010でdllファイルの作成に...
-
vb6で作成した画面が処理に時間...
-
VBにてIMEの入力モードを変える...
-
*.exeと異なるフォルダのDLLを...
-
手書き文字認識のdll
-
VC++6.0 でのライブラリ参照方法
-
MFC7.0ランタイムライブラリ
-
ファイルをvbaで圧縮したいので...
-
VB2005ExpressEditionでのUnlha...
-
APIの呼び出しDLLファイルの場...
-
scrrun.dllの読み方を教えてく...
-
M365にアップデートしてからコ...
おすすめ情報