In some computer programming languages, it is possible to write and compile the program in segments rather than all at once. When you do this, there are usually references that can't be resolved since they are in other segments (and at this point, each segment is completely independent of other segments). To combine the segments together into one program (and to complete the unresolved references), a LINKER is used. To actually run the program, it must first be loaded into memory. Usually, the compiler/linker makes a relocatable executable file. This simply means that the executable program can be loaded anywhere in memory (By comparison, a non-relocatable program must go into one specific place in memory). When the LOADER loads the program, it does the final steps to fix this iteration of the program into a specific place in memory (usually loading a specific memory address into a program register. The compiled program already has its memory references relative to this register, so it just needs a starting value). I hope this make sense. I'm writing it while I'm falling asleep at the computer