This training course is designed to provide practicing C programmers with an in-depth treatment of the memory mechanisms available in the C programming language. The course takes participants through a comprehensive look at C99 tools and techniques, pitfalls and best practices for memory management. Issues covered include scoping and storage class, initialization, allocation/deallocation, address space organization, run time memory management, virtual memory, page management, and optimization as well as coverage of some of the most popular static and dynamic code analysis tools for C programs. Common pitfalls and defensive programming techniques are covered in detail throughout the course.