12 Part I:The .NET Framework Figure 1-5 shows the structure of an assembly. Figure 1-5: A diagram of an assembly. Assemblies are made up of the following parts:  The assembly manifest  Type metadata  Microsoft Intermediate Language (MSIL) code The assembly manifest is where the details of the assembly are stored. T he assembly is stored within the DLL or EXE itself. Assemblies can either be single or multifi le assemblies and, therefore, assembly manifests can either be stored in the assembly or as  a separate file. The assembly manifest also stores the version number of the assembly to ensu re that the application always uses the correct version. When you are going to have  multiple versions of an assembly on the same machine, it is important to label them carefully  so that the CLR knows which one to use. Version numbers in assemblies are constructed in  the following manner: <major version>.<minor version>.<build number>.<revision> Type metadata was explained earlier in this chapter as data about data.  This metadata contains information on the types that are exposed by the assembly such as securi ty permission information, class and interface information, and other assembly informa tion. Garbage collection The .NET Framework is a garbage-collected environment. Garbage collectio n is the process of detecting when objects are no longer in use and automatically destroying  those objects, thus freeing memory. Garbage collection is not a new concept. It has been used in other langu ages for quite some time. In fact, Java has a garbage collection system in place. Other lang uages, such as C++, do not have a garbage collection. C++ developers themselves are required to  take care of the destruction of objects and the freeing of memory. This results in a numb er of problems, such as memory leaks. If the developer forgets to free objects from the appli cation, memory allocation of the application grows, sometimes substantially. Also, free ing objects too early causes application bugs to crop up; these kinds of errors are, in most c ases, quite difficult to track down.