Remember, to become a truly proficient C# programmer, you must have a solid understanding of how memory allocation and garbage collection work. This chapter provided a description of how the CLR manages and allocates memory on the heap and the stack. It also discussed how to write classes that free unmanaged resources correctly, and how to use pointers in C#. These are both advanced topics that are poorly understood and often implemented incorrectly by novice programmers.