No matter what programming language or technology you use, if your software fails to make effective use of the underlying CPU caches, your system's performance will suffer. A lot. This session provides a wide-ranging overview of CPU caches, how they operate, and how that affects high-level decisions on matters such as data structures and traversal strategies. Both single- and multi-threaded execution are considered. Specific topics include different cache types; private and shared caches; cache lines and speculative prefetching; false sharing; and cache-friendly program organization, data structures, and traversal strategies. If you care about performance, the information in this talk is essential.
C++11 offers a variety of new features that embedded developers are likely to find particularly attractive. Such features include enums with known underlying sizes, control over alignment, constexpr variables and functions that guarantee compile-time value computations, lambda expressions usable as function pointers, user-defined literals (UDLs) for domain-specific unit types, array objects with an STL interface, and move semantics and perfect forwarding to eliminate unnecessary object copying. C++14 adds support for binary literals, predefines some common UDLs, and extends the power of constexpr functions. This presentation offers an overview of features in C++11 and C++14 that are especially useful in the embedded domain.