Does this mean that C++ is inherently limited with underpowered hardware. Or even that concepts like OOP make use of virtual tables and other memory overheads. Or is it simply because a C++ compiler is more difficult to implement for a specific architecture, so why bother when C is enough for system programming, etc.
For C++ specifically it's a great language for low resource embedded systems and widely used. There is nothing stopping you from using it today (responsibly).
A much more interesting road is languages like Java that have more intense runtime requirements like garbage collection. But Java has run in similar environments for decades - it just takes the right VM and some restrictions (usually, no reflection).
A very interesting project right now is Toit, which is pushing the boundary on JIT compilation on small devices.
The main issue in embedded systems is the lack of RAM and the hard real-time requirements that make using garbage collected languages sometimes problematic.
When you get down to really small systems, you're writing in assembler to try to fit code in the N bytes available. I once crammed code into a 512 byte space, when I was done, I had added features requested by the customer, and had 1 byte left over. Whew!
Thankfully those days are pretty much over, unless you're programming a 3 cent microcontroller.