Het is mij opgevallen dat een aantal DLL's het VM nogal in groffe stukken hakt.
Dit komt omdat DLL's zo mogelijk ingeladen worden op hun "base-address"... Wat de logica hier achter is is me nog niet duidelijk overigens.
Zo wordt bv de QT dll een base address gegeven van 0x39D00000
En heeft de OpenGL32.dll een base address van 0x5ED00000
Aangezien je VM loopt van 0x0 tot 0x80000000 zijn bovenstaande addressen redelijk onhandig. Het verhindert het alloceren van grote stukken geheugen.
Nu kun je het base address wijzigen met een tool die "rebase.exe" heet en onderdeel is van de platform sdk. Maar ik voel er weinig voor een batch bestand te schrijven o.i.d. die op alle pc's dat truukje doet... Daarbij zijn die veranderingen permanent en dat lijkt me ook niet bepaald wenselijk.
Zou het niet mogelijk zijn om DLL's te laden op- of the verhuizen naar een bepaald address... ? Ik heb een flauw vermoeden dat dat ook mogelijk is met de platform SDK, met de functie RebaseImage()... maar als ik deze zo lees lijkt het ook erg permanent.
Aldus de SDK:
Dat moet toch mogelijk zijn ?
Dit komt omdat DLL's zo mogelijk ingeladen worden op hun "base-address"... Wat de logica hier achter is is me nog niet duidelijk overigens.
Zo wordt bv de QT dll een base address gegeven van 0x39D00000
En heeft de OpenGL32.dll een base address van 0x5ED00000
Aangezien je VM loopt van 0x0 tot 0x80000000 zijn bovenstaande addressen redelijk onhandig. Het verhindert het alloceren van grote stukken geheugen.
Nu kun je het base address wijzigen met een tool die "rebase.exe" heet en onderdeel is van de platform sdk. Maar ik voel er weinig voor een batch bestand te schrijven o.i.d. die op alle pc's dat truukje doet... Daarbij zijn die veranderingen permanent en dat lijkt me ook niet bepaald wenselijk.
Zou het niet mogelijk zijn om DLL's te laden op- of the verhuizen naar een bepaald address... ? Ik heb een flauw vermoeden dat dat ook mogelijk is met de platform SDK, met de functie RebaseImage()... maar als ik deze zo lees lijkt het ook erg permanent.
Aldus de SDK:
Tja, wat is nou belangrijker ? De tijd die je applicatie nodig heeft om op te starten of het geheugen gebruik ? Nou zal dat eerste wel voor de meeste applicaties gelden, maar er zijn er toch ook die voor de laatste willen gaan.You can rebase an image to reduce the required load time for its DLLs. If an application can rely on a DLL being loaded at the desired load address, then the system loader does not have to relocate the image
Dat moet toch mogelijk zijn ?