LoadされるDllやIMEのアドレスの指定について – プログラミング – Home

LoadされるDllやIMEのアドレス...
 
通知
すべてクリア

[解決済] LoadされるDllやIMEのアドレスの指定について


GAP
 GAP
(@GAP)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

さっそくですが質問です。
ターゲット環境はWindows 2003 ServerとWindows XP Proで、
開発環境はWindows XP Pro SP2です。
VisualStdio .Net 2003、MFCのダイアログベースです。

上記環境で作成した開発したWindowsアプリケーションをDependencyWalkerで
「Start Profile」して、dllのロードされる位置を調べたところ、
「IMJPCD.DIC」「IMJP81.IME」「UXTHEME.DLL」等がプロセスが使用できる領域の
比較的中間位置にロードされていました。
そのため、プロセスで連続した巨大なメモリを確保しようとしたとき、「IMJPCD.DIC」の
ロードされている900MBほどしか確保できません。

本来は連続した巨大なメモリを使用しない設計が望ましいと思われますが、
それはどうしても変更できない事情があります。

どうにかして、「IMJPCD.DIC」「IMJP81.IME」せめてこの2つだけでも、ロード位置を後
ろに変更できないでしょうか。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200603/06030059.txt

> UI表示前にメモリ確保すればIME関連のDLLとか
> に邪魔されずに済むと思います。

だそうですが、保障は出来ません。

加えて、Vista からは ASLR(Address Space Load Randomization)という機能で、UI 表
示前にロードされる KERNEL32.DLL や USER32.DLL などもランダムなアドレスに配置され
ますので、Vista 以降では期待通りに行かない可能性があります。

> 本来は連続した巨大なメモリを使用しない設計が望ましいと思われますが、
> それはどうしても変更できない事情があります。

というわけで、根本的にはこっちを何とかするしかないです。


返信引用
GAP
 GAP
(@GAP)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

シャノンさんありがとうございます。

確かにロード前、つまり画面表示前にメモリ確保すると1.4GBくらい確保できました。
でも、画面表示後に確保するサイズが決まりますので申し訳ないですがだめでした。

連続した領域は、使ってるミドルウェアの引数に必要なので、
「IMJPCD.DIC」のロード位置を替えられないなら、
900MBくらいが限度という「仕様」で避けるしかなさそうです。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

起動直後画面表示前にテキトーなサイズでメモリ確保してアドレス空間を予約しておき
画面表示直後にはメモリ処分して、サイズ確定後に再度確保
でよいのではないかと。


返信引用
GAP
 GAP
(@GAP)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

遅くなりました。
tetrapodさんの方法で、うまく連続領域を確保できました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました