高速化の為に/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ランキング
-
VB6.0(SP6)にて開発を行なって...
-
指定された引数が有効範囲にな...
-
res://ieframe.dll/について
-
Excel2007のVBAで、セル範囲を...
-
VB6 - DLLの動的リンクの方法に...
-
visual studioの不要なDll削除方法
-
ファイルをvbaで圧縮したいので...
-
ASP.NETのDLL入れ替えについて
-
C# ネット上に公開されているFF...
-
M365にアップデートしてからコ...
-
shell32.dll のアイコンを使っ...
-
about:blankの削除したいのです...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<math.h>があるのにsqrtが・...
-
<unistd.h>をVisualStudioでつ...
-
C言語をコンパイルするとコンピ...
-
unsigned long long 型のフォー...
-
VBAを何回も作り直して、容量が...
-
適切な変換関数が存在しない???
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
M365にアップデートしてからコ...
-
C# DLL エントリ ポイントが...
-
visual studioの不要なDll削除方法
-
res://ieframe.dll/について
-
ASP.NETのDLL入れ替えについて
-
C++製DLLにてVB.NET関数を引数...
-
VB6.0(SP6)にて開発を行なって...
-
ファイルをvbaで圧縮したいので...
-
WIN10で常にフォームを手前に
-
VB.NET xdoc2txtをつかってPDF...
-
VC++6.0 でのライブラリ参照方法
-
VB2003で レジストリを格納する
-
user32.dllがないためアプリが...
-
エクセル マクロで指定フォルダ...
-
vb6で作成した画面が処理に時間...
-
VBAエディタのコード画面で、カ...
-
[VBA]64b版-行数表示.dllの登録...
-
指定された引数が有効範囲にな...
-
Java hs_err_pid0000.log解析
-
メイクファイルからdllを生成す...
おすすめ情報