Demo Support Download Forums Blog Customer Login
 
Search:

 

 

Overview
Max-IT (VM)
The Facts
The Problem
The Solution
Max-IT (CPU)
The Facts
The Problem
The Solution
Licensing
View Demo Movie
Download Now

The Facts

Every executable and DLL module has a preferred base address which represents the “ideal” location where the module should get mapped to inside the process’s address space.

Typically, when a programmer builds a DLL module, the linker sets the preferred base address at 0x10000000. This can be easily verified by using the Visual Studio’s DumpBin utility or Sysinternals’ Process Explorer.

The Problem

Figure 1 illustrates the problem. Let's say you want to run an executable that requires two DLLs. The loader maps the first DLL at its preferred base address of 0x10000000. It then attempts to map the second DLL at the same preferred base address of 0x10000000., but will fail because the first DLL is already mapped at this address. As a remedy, the loader must “relocate” the second DLL module by placing it somewhere else inside the process’s address space. It must also perform the necessary DLL code fix-ups.


Figure 1 – An example of a DLL collision

Relocating DLLs and performing the necessary fix-up operations is absolutely taxing on a system. The loader has to relocate hundreds of DLLs and modify a significant portion of each DLL’s code. This leads to more memory consumption and excessive copy-on-write operations.

This run-time overhead can be very damaging to the performance of a system and must be avoided at all costs. When multiplied by the number of users on a Terminal Server, this overhead can have devastating implications on performance and application response times.

Next: Max-IT (VM) - The Solution