![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
高速化の為に/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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- ノートパソコン .dllファイルがありませんと表示される 5 2023/04/30 03:03
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- システム BIOSによるUSB-HUB設定について 2 2022/03/29 09:45
- Windows 10 windowsの回復ドライブや復元ポイントを使用した場合の戻る位置を教えてください。 5 2023/08/19 14:52
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メイクファイルからdllを生成す...
-
POSTAL2が起動しない
-
WIN10で常にフォームを手前に
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
VBScriptによるExecuteExcel4Ma...
-
<math.h>があるのにsqrtが・...
-
math.hに含まれる関数が使えない
-
eclipseでプログラムが実行でき...
-
C言語のPathFileExistsについて
-
gcc コンパイル killed
-
obj オブジェクトファイルがで...
-
VC6でCheckTokenMembershipが使...
-
C#のコマンドラインの分割コ...
-
MinGWのコンパイル方法(初心者)
-
ilink32について。'__setargv__...
-
eclipseでデバックするとエラー...
-
opencvの練習
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
visual studioの不要なDll削除方法
-
C# DLL エントリ ポイントが...
-
VB6.0(SP6)にて開発を行なって...
-
WIN10で常にフォームを手前に
-
VC++6.0 でのライブラリ参照方法
-
エクセル マクロで指定フォルダ...
-
res://ieframe.dll/について
-
VBAエディタのコード画面で、カ...
-
ASP.NETのDLL入れ替えについて
-
指定された引数が有効範囲にな...
-
メイクファイルからdllを生成す...
-
dllをいじる。。
-
[VBA]64b版-行数表示.dllの登録...
-
手書き文字認識のdll
-
VBにてIMEの入力モードを変える...
-
コマンドラインで商用利用可能...
-
VB.NET xdoc2txtをつかってPDF...
-
VB2003で レジストリを格納する
-
*.exeと異なるフォルダのDLLを...
-
ファイルをvbaで圧縮したいので...
おすすめ情報