
Inside the C++ Object Model focuses on the underlying mechanisms that support object-oriented programming within C++: constructor semantics, temporary generation, support for encapsulation, inheritance and "the virtuals" - virtual functions and virtual inheritance. This book shows how your understanding the underlying implementation models can help you code more efficiently and with greater confidence. Lippman dispells the misinformation and myths about the overhead and complexity associated with C++, while pointing out areas in which costs and trade-offs, sometimes hidden, do exist. He then explains how the various implementation models arose, points out areas where they are likely to evolve, and why they are what they are. He covers the semantic implications of the C++ object model and how that model affects you programs.
Pdf at https://www.google.com/goto?url=CAESawHuR6pN4SDa5tLkqrSuoaot... and reissue at https://www.researchgate.net/publication/2396782_Multiple_In...
I read this in one of the documentation books (still have it somewhere) which came with SCO Unix (don't recall the date). This book contained articles on C++ only and was an introduction to the language and compiler (since the language was very new). I also remember that it had an article on Template mechanism.
Next was Jan Gray from Microsoft's excellent 1994 article in MSDN titled C++: Under the Hood which explained class layouts/vtables/etc. It is still a excellent read today. Pdf at https://www.google.com/goto?url=CAESewHuR6pNy2XLp9fzgwckhWpg...
Finally of course you have Inside the C++ Object Model by Stanley Lippman explaining everything in detail.
1) C++ Primer 5th edition (updated to C++11) by Stanley Lippman, Josee Lajoie, Barbara Moo. Don't bother with any other book until you have made a full pass over this. You can later update yourself to C++20/C++23/etc. from the books by Stroustrup/Others.
2) Inside the C++ Object Model by Stanley Lippman. An old classic to understand the "C++ Abstract Machine" built on top of the "C Abstract Machine".
PS: The Definitive C++ Book Guide and List - https://stackoverflow.com/questions/388242/the-definitive-c-...
Supporting virtual member functions (i.e. runtime polymorphism) only requires adding a vtable pointer—which IIRC Linux also does for some of its own structural subtyping, at least in its Virtual File System component.
Multiple inheritance requires some more bookkeeping by the compiler of appropriate offsets, but structurally it doesn't change very much.
It's not surprising: C++ was famously originally implemented as a preprocess transformation into C. Inside the C++ Object Model[1] is a fascinating deep dive on how C++ semantics map to C constructs.
[1] https://www.oreilly.com/library/view/inside-the-c/0201834545...
But be warned, earning potential-wise you may lose out(unless you get lucky) to the latest whiz-bang Web/Mobile technology/framework brouhaha. That is the nature of the market. However i consider that the satisfaction of learning and "knowing" how things work, more than makes up for the small loss in earning potential. This technology is also more fundamental and stable and thus will not go away anytime soon.
I have found the following papers/books (somewhat different from the most commonly cited) useful in my study;
Languages: Fluency in C is a must. It is THE "portable assembly" language and is available on everything from 8-bit MCUs to multicore servers. You can also link C modules to everything under the sun thus allowing you to extend almost any other language. C++ is also needed; but judicious usage as a "better C" rather than heavy-duty OOP/Generic/Template-mataprogramming madness.
- Computer Systems: A Programmer's Perspective 3rd ed. based on x86-64. You might also want to get the 1st ed. which is based on 32-bit x86. These books cover the HW/SW interface and thus includes almost all the topics under "Systems Programming".
- The C Companion by Allen Holub.
- Inside the C++ object model by Stan Lippman.
Tools/Toolchain: Knowledge of the GCC toolchain is a must.
- The Definitive guide to GCC by Hagen
- ELF: A Programmer's perspective; paper by H.J.Liu
- C++ Under the hood; MSDN article by Jan Gray
- The Practice of Programming by Kernighan and Pike.
OS/Kernel/Drivers:
- UNIX Systems for Modern Architectures: Symmetric Multiprocessing and Caching for Kernel Programmers by Curt Schimmel.
- Linux Kernel Development 3rd ed. by Robert Love.
- Essential Linux Device Drivers by Venkateswaran.
- Embedded Linux Primer 2nd ed. by Hallinan
- The Unix Programming Environment by Kernighan and Pike
- Advanced Unix Programming 2nd ed. by Rochkind
Computer Architecture/Organization
- Modern Processor Design: Fundamentals of Superscalear Processors by Shen and Lipasti
- Computer System Design: System-on-Chip by Flynn and Luk
Parallel/Distributed processing:
- Foundations of Multithreaded, Parallel, and Distributed Programming by Andrews
- The Art of Multiprocessor Programming by Herlihy and Shavit.
Bare-metal Embedded: Where the "rubber meets the road"
- Embedded Systems Architecture: Explore architectural concepts, pragmatic design patterns, and best practices to produce robust systems by Lacamera
- Patterns for Time-Triggered Embedded Systems by Pont.
Stroustrup's The Design and Evolution of C++ is another great "why" book, and I hope that Bjarne will decide to update it for C++11 or 14.
It's older, but reading Lippman's Inside the C++ Object Model is what finally made the language click for me.