This paper discusses techniques for efficient use of a C/C++ compiler in an embedded software project along two tangents, performance and usability. Part 1 details compiler optimizations to improve application performance and techniques available to developers to assist the compiler in optimization. Part 2 details techniques to increase developer efficiency and productivity. Topics for improving application performance such as cache locality and vectorization are discussed. Usability topics such as improving compile time, diagnostics and compatibility are covered.