Rebasing
The lowest memory location in the virtual memory address space where the running component code is located in the process is called the base address. When loading in-process components, the system first attempts to load each of them at its specified DLL base address. However, if that address is not free, or if a contiguous block of free memory large enough to hold the component does not exist above that address, then loading the component at this location will cause a conflictan overlapwith the memory address range used by another in-process component. If this is the case, the system must find an alternative location at which to load the component.
Called rebasing, this mechanism requires the system to recalculate the memory addresses for the code and data, and this is not a good thing. Not only does rebasing cause the system to spend extra time and effort loading the component, but, worse, rebased components cannot be shared between processes. Normally, a component that is loaded at its base address can be used by multiple processes while having its code and data stored in physical memory only once. The system is then able to share pages of memory between the processes. However, if the component loads at different base addresses in each process, each process must load the component separately into physical memory.